It's a lot slower to send 1000 separate 1 polygon objects to the graphics card that a single object made up of 1000 or even 2000 or 3000 polygons!
It depends ( I won't go into detail here ). Under normal circumstances the main performance difference is caused by VBOs, which enables you to store data on the GPU for non-Immediate rendering. However, most engines re-upload the entire mesh as soon as any changes have been made ( which might be applicable for a "growing" environment ), thus losing the performance gain again.
Anyway, the trick is to come up with a algorithm that generates all required variables from only a few parameters ( type, generation etc. + a random seed ). To speed things up you could build lookup-tables for the algorithm ( ex random ) at a reasonable resolution & range, and interpolate between those values.