Here is what I came up with:
Mostly just tidied up what you did (it had few bugs that caused some unintended behavior), it's a really cool system you got :)
I removed some of the looping, added some variables for control, made trees be destroyed outside the layout + some minor tuning. Also made them not overlap, which causes most of the slowness here, you can tinker that if you wish :)
EDIT: Just noticed your second question, that's how carefully I read peoples posts... :P
Anyway, added an event to handle the Z order as well. Basically after all trees have been generated we go through them in order of their Y position and send them to bottom of the layer.
EDIT2: Few notes on performance; you could try creating 1000 trees in editor and set their position in events instead of spawning new ones during execution, might be quicker. And if you do not want the player to see threes going swooshswooshswoosh during generation you could add a loading screen that you hide after the map has been generated.