Du kan skapa en "materialiserad vy".http://en.wikipedia.org/wiki/Materialized_view
i princip en tabell som är resultatet av JOIN, och skapa ett fulltextindex på det.
CREATE TABLE materialized (FULLTEXT idx (user_name,department_name))
SELECT u.id,user_name,department_name
FROM users u INNER JOIN departments d ON (d.id = dept_id)
Du kan sedan köra frågor på den tabellen istället..
SELECT * FROM materialized WHERE MATCH(user_name,department_name) AGAINST('test' IN BOOLEAN MODE)
men...
Du kommer att behöva uppdatera tabellen med jämna mellanrum (eller när de underliggande tabellerna uppdateras) - enklast är bara att DROP
och återskapa - Eller så kan du använda TRUNCATE
sedan INSERT INTO ... SELECT ... FROM ...
formatera.
(mer utarbetade scheman involverar utlösare för att hålla "vyn" uppdaterad, eller till och med titta på binloggen och spela upp uppdateringar mot "vyn")