Получается такая ситуация (по второму рисунку): появляется дополнительное поле type, поле type_id никуда не пропадает. Получается что два поля идентифицируют сущность. Если тип контакта изменится, то нужно будет изменить и имя класса.
Но основное условие было постараться максимально меньше внести изменений в существующую структуру.
Я б сформулировал иначе: чтобы использовать штатную реализацию STI. Поле может называться как угодно, но оно обязано указывать на существующий класс, либо быть пустым и находится в тойже таблице. В моем случае данное поле заменяю на join с другой таблицей и получение имени класса оттуда. Штатными средствами реализовать не получилось такую схему.
Неканоническое STI в Rails