Извините за позднее наблюдение, но разве вы не делаете декартово соединение с этими тремя столами?
SELECT Artist.* FROM Artist, Band, Instrument WHERE MATCH (Artist.name) AGAINST ('mysearchterm') OR MATCH (Band.name) AGAINST ('mysearchterm') OR MATCH (Instrument.name, Instrument.description) AGAINST ('mysearchterm');
Предполагается, что база данных с 100 группами, 10 инструментами и 500 исполнителями вы ищете в 500 000 строк.
Я бы ожидал увидеть что-то вроде предположения, что у вас есть база данных, где Artist принадлежит к одной группе и играет на одном инструменте:
SELECT Artist.* FROM Artist, Band, Instrument WHERE Artist.band_id = Band.id and Artist.instrument_id = Instrument.id and (MATCH (Artist.name) AGAINST ('mysearchterm') OR MATCH (Band.name) AGAINST ('mysearchterm') OR MATCH (Instrument.name, Instrument.description) AGAINST ('mysearchterm'));