There are a lot of ways - depending on what you want... Like everywhere else, there isn't something like "the best solution". Which plattform is your target? Which language are you using? What is about text resizing/rotation - is it necessary? Do you need to be able to render TrueTypeFonts? Whats about Multilanguage/Unicode? How do you want to store your text (which encoding etc.)?
I used in the past also FTGL, as well as pure freetype (http://www.freetype.org/ FTGL is based on this), different kind of bitmap fonts, outline fonts... Now I'm mostly addicted to bitmap fonts, but thats only my personal preference. Because I dont want to deal with different charsets, encoding and stuff like that anymore - and licensing for bitmapfonts is also easilier and cheaper than for TrueTypeFonts. And its usable on every plattform that can load images. I use simply an quad in openGL and map a part of my texture on it. The other side is: The font will be only clean resizable at a factor about +/-50%. If you can live with that, I would suggest using a bitmapfont.
If you have also to deal with different encoding/charsets you should find a way to load and use TrueTypeFonts (like with freetype, using another library or with your own implemenation)...
Also have an look at nehes different tutorials on this topic:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 Bitmap Fonts
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 Outline Fonts
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 Texture Mapped
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 2D Texture Font