You're saying "Name starts with X.. OR ALL Contact Details start with X". You want "Name starts with X .. Or ANY Contact Details start with X":
Func<BAL.Contact, bool> expr_contact =
x => x.Name.NullSafeStartWith(txtSearch.Text)
|| x.ContactDetails.Any(a => a.TP.StartsWith(txtSearch.Text));
// ^^^ Any