Its hard to tell without code what the real bottleneck is here, but since your question is "what is the best way to render 150,000 flat color textures on the screen, the answer is "not with textures."
The best way to do this in my opinion is to create a new vertex attrib array of color vectors, and use it like so
//vertex shader
attribute vec4 vertexCoords;
attribute vec4 vertexColor;
varying vec4 fragmentColor;
void main()
{
fragmentColor = vertexColor;
gl_Position = vertexCoords;
}
//fragment shader
varying lowp vec4 fragmentColor;
void main()
{
gl_FragColor = fragmentColor;
}
This way you can draw your whole background in one draw call, and changing what the background looks like is just a glBufferSubData
call away.