What you're calling "traditional OpenGL" is actually deprecated functionality that is no longer likely to be supported in hardware.
It's important to remember that glBegin/glEnd pairs (also known as immediate mode) was always the slowest path, even in the pre-GLSL days, when use of vertex arrays would be what you would want if performance mattered to you. Vertex arrays, by the way, are a feature going all the way back to GL1.1 in 1997 (they were even available under GL1.0 - even earlier - as an extension) so they should not be considered any kind of "new way of doing things" either.
It's also important to realize that you're actually talking about two different things here. GLSL is not a replacement for glBegin/glEnd pairs and it's perfectly possible to use GLSL with glBegin/glEnd. GLSL is a replacement for glTexEnv calls (as well as a few other things unrelated to glBegin/glEnd), and when you start trying to express any kind of moderately complex texturing setup using glTexEnv/etc you'll quickly see how much simpler a shader-based approach is (and that's not even saying anything about those things that glTexEnv/etc just flat-out cannot do).
Cg is just another shading language so that's a matter of personal preference (so long as you're sticking with OpenGL) more than anything else.