You should probably get a bit better performance doing this in CG, but can't say for sure until trying it out. If you're using a recent version, it'll be using CG shaders anyway. Get one of those and apply the changes here to it to see what the perf is like - it WILL be slower, as it's one more instruction at least, but perhaps it could be faster than this...
The fragment shader probably wants to be something like this:
fixed4 col = tex2D(_MainTex, i.texcoord);
col.rgb += i.color.rgb;
col.a *= i.color.a;
If you don't need to be able to fade out, then the alpha channel can be exactly the same as rgb and that'll save one instruction. You could probably try that on the original fixed function one as well by changing it to:
SetTexture [_MainTex] { combine texture +- primary }
This way can make it white or black, and in theory do some form of alpha offset fade out.