Your fragment shader is really pretty complex, even games running on high end phones don't tend to use such expensive techniques as per-pixel bump-mapping and phong shading, and those GPUs can be several times faster than Pandora's. The SGX530 in OMAP3530 really doesn't have a lot of fragment shading grunt, you have to lower your expectations a lot. I expect those highp vec3 normalize functions to be costing you at least 6-7 cycles each (FADD, 2 FMADDs, one reciprocal square root, three multiplications by the reciprocal). I see 3 of those, a highp vec3 dot (FADD + 2FMADDs), 3 loose highp FMADDs, 3 loose highp FMULs, 1 loose highp FADDs and 5 FMAX. So right off the bat that's like 33 cycles minimum assuming there are no tricks I don't know about, posisbly far more cycles if it has some weaknesses. There are also cycles needed to perform interpolation and texture sampling but you'd expect those could happen in parallel with the shader cycles, although enough texture cache misses may give you problems. It may also cost you extra shader cycles just passing the sampler coordinates through highp variables. More cycles as well if there's alpha blending (you don't glEnable it so I assume not).
If you are 100% shader limited and getting 3.84m pixels per cycle, if you have zero overdraw with those pixels, that'd mean about 57.3 cycles per pixel (assuming the SGX clocks are running at the correct 110MHz speed). Part of that would be for vertex shading, which takes more cycles than your fragment shader, but since you only have 3000 polygons it'd be a small fraction. So my rough calculation for a minimum isn't a huge amount off from the theoretical peak. This is assuming two things: that something else isn't causing an even bigger bottleneck and that the shader engines can always stay busy. Your code is really abstracted and I don't really know what the scene is like so it's hard for me to even give a good guess.
Definitely follow sebt3's advice, that will make a huge difference, especially with lowps, but even then I don't think it'll get you as fast as you want to be. The only optimizations I can think of are to bake the * 2.0 - 1.0 that you perform on samplerNormal into the texture itself, and that unless you're using alpha for anything there's no point calculating bTex.w.