I have found a workaround. I define a property formula in the mapping file which does the concatenation:
Code:
<property name="ForenameSurname" formula="forename + ' ' + surname" type="String"/>
<property name="PreferredNameSurname" formula="forename + ' ' + surname" type="String"/>
I can then refer to these properties in my search code:
Code:
ICriterion matchName =
Expression.Or(
Expression.InsensitiveLike("contact.ForenameSurname", filter.Member, MatchMode.Anywhere),
Expression.InsensitiveLike("contact.PreferredNameSurname", filter.Member, MatchMode.Anywhere)
);