How do I specify the render order of GameObjects?

I want to create a series of layers from my 3D objects. They all exist on a 2D plane, and can pass through one another. Rather than having them blend together when they collide, I want to render them in a controllable order, clearing the depth buffer each time, so that they are drawn directly on top of on another.

One way of doing this is to have multiple cameras that clear their depth buffers, and have specific culling masks. This works, but I find that as I add more cameras, frame rate takes a hit. Not only that, but it's a bit prohibiting, since I expect to have a large number of objects to draw in this ordered fashion. Further, the order in which they are rendered changes, which would make things challenging to juggle the culling masks and cameras as objects come in and out of play.

Any ideas of implementing this in Unity? Oh, and I don't have Unity Pro, so I need something that will work in the free version.

You can use different shaders that specify a different render order but are otherwise the same. For example, one could have

Tags {"Queue"="Transparent"}

and another could have

Tags {"Queue"="Transparent+1"}

which would render on top of the first one.

Or you can use objects at different depths, and position the colliders so they all still collide with each other. There's no rule saying the collider has to be in the same position as the mesh.

Use an orthographic camera (checkbox in camera properties) and place objects at different depths.