você pode escrever como
IQueryable query = from staff in dataContext.Staffs;
query = from staff in query where (name1 != null && staff.name == name1);
Desta forma, a segunda parte de sua condição não será avaliada se sua primeira condição for avaliada como falsa
Atualização:
se você escrever
IQueryable query = from staff in dataContext.Staffs;
query = from staff in query where (name1 == null || staff.name == name1);
e name1 é nulo, a segunda parte da sua condição não será avaliada, pois ou condição requer apenas uma condição para retornar true
por favor veja este link para mais detalhes