The difference is that you draw all the QUADS in one batch (one glBegin/glEnd pair), while the VBO version makes a draw call for every two triangles. Try to make one index buffer containing 20000...