enabling/disabling GL_VERTEX_ARRAY for each single particle is a red flag.
using individual VBOs for each particle is a red flag.
Update the positions of all your particles and dump that to a single VBO in a single glBufferSubData call. Then render all of them with one single DrawElements call. Doing all these state changes and stuff for each individual particle is not going to work.