I think you may have to, 4 hundred thousand verts seems like a lot of data to be trying to process in one big chunk. I would just comment out some of the code you have now and try splitting it up into the smaller, bite sited pieces and see if your performance goes up. If it doesn't, or worse yet, goes down, you can just delete what you put in and uncomment your old code. Do keep in mind though that the GL_MAX_ELEMENTS_VERTICES and GL_MAX_ELEMENTS_INDICES are part of the GL1.2 spec (glDrawRangeElements(***)). If I read the spec properly, glDrawRangeElements is a modified version of glDrawElements that actually calls glDrawElements (once again, feel free to correct me if my assumtion is wrong), and the MAX_ELEMENTS_**** should hold true even when using the vanilla glDrawElements.

Dan