If you're using a normal map that was generated by Maya, then you have to use Maya's tangent/binormal data (or tangent/handedness data) -- you can't generate your own tangents and still correctly decode that normal map (*unless you use the exact same algorithm that Maya does internally*).

To deal with the fact that handedness may differ (*i.e. either binormal = cross(normal,tangent) or binormal = -cross(normal,tangent)*) then you either need to store the Maya's binormal per vertex, or store an extra bit per vertex indicating which binormal to use.

Often I've seen this implemented by changing the tex-coord attribute from a float2 to a float3, and storing either +1 or -1 in the z value. You then generate the binormal with cross(normal,tangent) * texcoord.z.

When you're building your model file, for each vertex, you can compare Maya's binormal against those two possible values to determine if you should be storing +1 or -1.