Я думаю, это действительно неловко. Тем не менее, мой метод «быстрого прототипа, который, вероятно, случайно станет рабочим кодом», выглядит примерно так:
CREATE TEMPORARY TABLE search_mirror (FULLTEXT INDEX (col1, col2, ...)) Engine=MyISAM SELECT * FROM original_innodb_table;
SELECT * FROM search_mirror WHERE MATCH(col1, col2, ...) AGAINST ('foo');
DROP TEMPORARY TABLE search_mirror;
А для бонусных баллов вы могли бы делать все это внутри транзакции, если это соответствует вашим ожиданиям (двойной бонус, если вы используете непостоянные соединения и выполняете поиск только по одному соединению, поскольку затем вы можете исключить оператор сброса).
Да, я понимаю, что это не настоящее отражение / репликация. Да, я понимаю, что дублирование таблицы может быть дорогим (сравнительно небольшие наборы данных здесь). Как я уже сказал, быстрый и грязный прототип. YMMV