I'm not an expert about it but I'll try to explain.
When you compute per pixel lighting in camera space, you transform your normal map from tangent space to camera space. The idea of working in tangent space is to transform the camera and lights to tangent space then perform lighting computations. So instead of transforming normals from your normal map to camera space, you transform other objects to tangent space.
You can perform this transformation in the vertex shader once per face, then you do not need to transform your normals.
Lets consider an example where we work in tangent space and we want to draw a quad that uses a 256x256 normal map (all texels are drawn). In a forward renderer we will transform the lights and the camera to tangent space, lets say 5 objects, and we do it in the vertex shader (once per face), so we do not have to transform the 256x256 normals (they are already in tangent space).
What's the catch ? It works well in a simple forward renderer but wont work with a deferred one. In a deferred renderer you would perform the camera and light transformation in the fragment shader which would be overkill. And if you're interested in clustered rendering it wont work in both forward and deferred, because you get a per pixel list of lights.
For attenuation it does not matter, as long as you are in the same space computations are the same.