Ваш лучший ответ, вероятно, должен иметь отдельный столбец tsvector в каждой таблице (с индексом, конечно). Если вы агрегируете данные до общего цвектора, он будет создавать множество обновлений для этого общего при каждом обновлении отдельных.
Вам понадобится один индекс на таблицу. Затем, когда вы делаете запрос, очевидно, вам нужно несколько предложений WHERE, по одному для каждого поля. Затем PostgreSQL автоматически определит, какую комбинацию индексов использовать, чтобы дать вам самые быстрые результаты - вероятно, с использованием растрового сканирования. Это сделает ваши запросы немного более сложными для написания (так как вам нужно несколько предложений сопоставления столбцов), но это сохраняет гибкость, позволяя запрашивать только некоторые поля в тех случаях, когда вы хотите.
Вы не можете создать один индекс, который отслеживает несколько таблиц. Для этого вам нужен отдельный столбец tsvector и триггеры на каждой таблице для его обновления.