Vermutlich ist auch der Function Call operator () stärker als die Stringverkettung.
new "$ns$controller"($data);
new ($ns.$controller)($data);
sollte demnach beides gehen, hab's jetzt nicht ausprobiert. Du musst nur aufpassen, ob Du in $ns den Backslash am Ende hast und ggf. ein '' in deine Namenskonstruktion aufnehmen. Hier stehen einige Vorschläge, wie man Pfade sicher kombinieren kann.
Gruß
Rolf