Votre requête ne renvoie que des enregistrements, si à la fois A et B associé contiennent le texte de recherche.
Cependant, vous ne précisez pas ce qui ne fonctionne pas.
Pourquoi ne pas LEFT OUTER JOIN les recherches en texte intégral, et remplacer :
SELECT *, (ISNULL(ftTableA.[RANK], 0) + ISNULL(ftTableB.[RANK], 0)) AS total_rank
et
WHERE ftTableA.Key IS NOT NULL OR ftTableB.Key IS NOT NULL