An rough front-to-back rendering order of your objects could also help a little bit without the need to add the additional z-only pass...

@dorbie: what hardware/driver/vendor has problems with GL_EQUAL and early z-reject? And what about GL_LEQUAL?