Можете да създадете „материализиран изглед“.http://en.wikipedia.org/wiki/Materialized_view
основно таблица, която е резултатите от JOIN, и създаване на пълен текстов индекс върху това.
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)
След това можете вместо това да изпълнявате заявки към тази таблица..
SELECT * FROM materialized WHERE MATCH(user_name,department_name) AGAINST('test' IN BOOLEAN MODE)
но...
Ще трябва периодично да актуализирате таблицата (или когато се актуализират основните таблици) - най-лесно е просто да DROP
и пресъздайте - Или можете да използвате TRUNCATE
след това INSERT INTO ... SELECT ... FROM ...
формат.
(по-сложните схеми включват тригери за поддържане на „изгледа“ актуализиран или дори гледане на binlog и повторно възпроизвеждане на актуализации срещу „изгледа“)