Your first method of drawing text is probably near the best for static (seldom-changing) text. You could probably improve on that using shaders (one vertex per character, generating the other three as well as texture coordinates using a geometry shader). Alternatively, you could use glTexGen to at least generate texture coordinates even without a shader. Your third solution will probably yield similar results and you don't have to fiddle with geom shaders.
Your second method is, judging by feeling, probably very slow. Any change to the transformation is probably much more expensive than passing a few vertices, because there's matrix multiplication involved (even though that is probably heavily optimized for special matrices like transformation), and might interfere with pipelined (parallel) processing, whereas vertices are just fed into the pipeline (and possibly multiple parallel pipelines).
Other than that, I just wrote a text rendering routine using old-fashioned glBegin/glVertex/glEnd, but then I'm not (yet) programming for OpenGL ES. For that, you'd probably have to use a VBO but could mark it for streaming usage. Also, glTexGen might work for either of those methods. I haven't tried that yet because text rendering just wasn't anywhere near being a performance bottleneck for me.
Keep in mind that even "fast-changing" text is slow-changing by OpenGL measure, otherwise the user would not be able to read it