What is the best way to save performance, if i want to use as many simple Gameobjects as possible?

Yesterday i read the question

http://answers.unity3d.com/questions/14092/how-multiple-instances-of-a-object-are-treated-by-unity/14249#14249 ,

and it gave me allot of thoughts about how i can save performance in my own project. There the camera is sourrounded by three types of simple objects. Pyramids, cubes and hedras based on some information. Every of this objects should be clickable, so i need an Mesh Collider, and have an color so it needs an Mesh renderer. Also every object right now has a 3Dimensional Label which is an additional Gameobject.

To save performance, right now i let the Labels in a certain distance dissapear. But i dont know if it is possible and just an utopic wish, i would show the objects the most of the time. And based on the information i use to instantiate them there could be arround, lets say 400000. If this is not possible, i would show as many objects, as fluently as possible.

Another things i did which i am not sure if it is good or not for the performance is. Becouse i need allot space to position them in the room, i increased the camera Far Clip Plane to 2000. Is this affecting the performance, or does it only deppeands how many objects are visible?

Another big performance hit, is the time i instantiate the objects. When i instantiate more then 2000 with a forloop, it got pretty laggy. So i thought about a system which kinda instantiate them equaly in a specific time range.

So i hope you can help me with this, and i wish i can create a stable application with this many Gameobjects. And here a picture so you can get a image from what i wanna do.

http://twitpic.com/21grft/full


Edit, additional question:

I managed to set up different Cameras for different Details. But for my last Camera, which is for the Objects which are realy realy far away, i thought about something which simply draw single pixels on my screen.

I tried to using a GUITexture, where i draw every frame an updatet texture which has visible pixels based on the transform position of my object. But the constant pixel.apply() command made my whole Applikation extremly slow.

Is there a way to change a fullscreen Texture on Runtime without extremly performance loss?

Something you might want to investigate is manually drawing the mesh objects. See documentation here: http://unity3d.com/support/documentation/ScriptReference/Graphics.DrawMesh.html

You might have to batch your geometry manually. Like maybe make it all one mesh/material, and then do your highlighting manually so you're not hitting a million draw calls with the objects in the world. That really depends on how static or not they are.

Also, I doubt you'll ever be performant with 400k objects. You'll probably have to do some kind of manual LODing where you have some representation of objects that are far away (like, say, a texture instead of a ton of meshes) that you change when things get closer. One trick is to render those far-away objects onto a low res material and then blend it back into the world. See here: http://technology.blurst.com/off-screen-particle-optimization/