Только что наконец прочитал как работают RULE в PostgreSQL.
И понял что очень много потерял не используя эту функциональность.
Как же это красиво, автоматически переписывать запросы по заранее сформированным правилам...
Всё-таки я нашёл для себя красивое решение проблемы со структурой таблиц — сделать полноценную нормализацию, после чего объединить всё через updateable views. Да, в этой view будут лишние пустые поля для каждого типа записи, зато я получу оч-ч-чень хороший выигрыш в производительности и простоте структуры базы данных. И мои любимые ссылки не пострадают.
Больше всего меня порадовало то, что оптимизатор действительно хорошо работает с VIEW, потому как реализованы они через те же RULE (т.е. подстановками по сути). По крайней мере на большинстве более-менее простых задач (типа простой выборки из VIEW, содержащего JOIN из нескольких таблиц) query plan получается вполне адекватный.