Поскольку вы выполняете конкатенацию в классе Java, Hibernate не может реально помочь вам с этим, извините. Он может просто не видеть, что вы делаете в этом методе, поскольку на самом деле он вообще не связан с постоянством.
Решение зависит от того, как вы отобразили наследование этих классов:
Если это таблица на иерархию, вы можете использовать этот подход: написать предложение SQL where для запроса критерия, а затем использовать оператор case:
s.createCriteria(Contact.class)
.add(Restrictions.sqlRestriction("? = case when type='Person' then firstName || ' '|| lastName else name end"))
.list();
Если это таблица для каждого конкретного подкласса, то вам лучше написать два запроса (так как именно это будет делать Hibernate в любом случае).