Name Vorname mehrmals tauschen

Ist das überhaupt Sinnvoll. Damit kannst du zwar David Guetta und Guetta finden. Aber Cudi, Kie bleibt bringt doch nichts, da es eh nicht am Anfang steht.
"Gueatta, David feat. Kid Cudi" wäre daher meineserachtens viel sinnvoller. Und vor allem auch einfacher umsetzbar.

Hier einiges dazu:
Switching first and last name of Artist

Mit dem "feat." in der Mitte bringst du aber einen neuen Sonderfall ins Spiel.
Geht aber auch alles.
Potentiell Probleme machen die Tatsache dass es Nachnamen gibt, die aus zwei Wörtern bestehen und in deinem Fall wahrscheinlich unterschiedliche Schreibweisen von feat.

Die Aktion wäre immer
Aktion: Tag-Feld formatieren
Feld: ARTISTSORT

und der Formatstring je nachdem:

$regexp(%artist%,(.) (.) (feat.),$2',' $1 $3)
würde dein Beispiel nach meinem Vorschlag umwandeln

$regexp(%artist%,(.) (.) (feat.) (.) (.),$2',' $1 $3 $5',' $4)
wie von dir gewünscht.

So weit so gut, das geht jetzt aber nur für Künstler deren Nachnamen ein Wort ist (mit beliebig vielen Vornamen.
Bei zusammengesetzten Nachnamen ein Fragezeichen einfügen. Dann darf der Vorname allerdings nur aus einem Wort bestehen:

$regexp(%artist%,(.?) (.) (feat.) (.?) (.),$2',' $1 $3 $5',' $4)
wenn beide Künstler einen zusammengesetzten Nachnamen haben

$regexp(%artist%,(.?) (.) (feat.) (.) (.),$2',' $1 $3 $5',' $4)
wenn nur der erstgenannte Künstler einen zusammengesetzten Nachnamen hat

$regexp(%artist%,(.) (.) (feat.) (.?) (.),$2',' $1 $3 $5',' $4)
wenn nur der zweitgenannte Künstler einen zusammengesetzten Nachnamen hat

Wenn dann auch noch verschiedene Schreibweisen von "feat." ins Spiel kommen, musst du die (feat.) Klammer anpassen. Hier lassen sich aber alternativen verwenden, so das man immer mit dem selben Formatstring arbeiten kann.
(feat.)
mit
(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.)
ersetzen.
Also z. B.:
$regexp(%artist%,(.) (.) (featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.) (.),$2',' $1 $3 $5',' $4)
wenn du die jeweilige Schreibweise von feat. auch so beibehalten willst.

oder:
$regexp(%artist%,(.) (.) (featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.) (.),$2',' $1 feat. $5',' $4)
wenn du sie bei der gelegenheit gleich auf "feat." vereinheitlichen willst.

Edit: hab den feat Teil nochmal etwas gekürzt indem ich ihn in drei Teile aufgespalten hab:
(f|F)(eaturing|EATURING|eat|EAT|t|T|)(.|)
entspricht
(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Fe
at.|FEAT.)

jetzt brauchst du halt auch dann auch drei "$n" um dich darauf zu beziehen, weil es jetzt drei Klammern sind. Also statt $3 jetzt $3$4$5

also z.B.:
$regexp(%artist%,(.) (.) (f|F)(eaturing|EATURING|eat|EAT|t|T|)(.|) (.) (.),$2',' $1 $3$4$5 $7',' $6)

oder mit vereinheitlichtem "feat.":
$regexp(%artist%,(.) (.) (f|F)(eaturing|EATURING|eat|EAT|t|T|)(.|) (.) (.),$2',' $1 feat. $7',' $6)