One technique I have heard about is to batch multiple of the same bock type together and then drawing one big quad with GL_REPEAT turned on for wrapping the textures.
For example if you have a 3x3 area of the top of grass blocks then instead of drawing 9 quads you could draw one quad that covers them all and then just have the texture repeat 9 times.
Not sure how to implement this, but it would reduce the number of quads a lot Smiley
The process Hermasetas describes here if I am not mistaken is pretty much Quadtrees
, which will speed things up when you have smooth landscapes. But if you're making a minecraft-like game, your terrain is going to be quite variable and this likely won't help.
If you're not already, upgrade to use VBOs and make sure you're breaking down into triangles before you send your geometry to the GPU.
As for what you said about the top-down perspective vs. first person, I think first person would cause a lot more lag than top down. With top down, you can predict how much you will be seeing at once, whereas with first person you can potentially see infinitely from the top of a mountain (except you can't because RAM). With top down, realistically you would only be rendering 4 * 4 chunks at a time max while still being able to see any units you control. Whereas in minecraft you can see like, 10 chunks in one direction with a good enough PC (meaning 400 chunks loaded).
If you plan on adding extremely large zoom, you're gonna have to look into LoD (level of detail)
Ultimately, were I you, I'd carry on and not worry too much about optimisation right now, and just come back to the relevant code IF you get too a point where it actually becomes a problem.