Это выглядит немного некрасиво, но вы можете использовать замыкание:
$query = Employee::with('User', function ($inner) {
$inner->where('id', '!=', 0);
})->with(['Company', 'Client'])
->where(function (Builder $sub) use($companyName) {
$sub->where('Company.name', 'like', $companyName)
->orWhere('Client.id', '!=', 0);
})->get();
Это восстановит:
employees where (user.id != 0 AND (company.name LIKE :companyName OR client.id != 0))
Чтобы изменить порядок этих ограничений, вы нужно переместить замыкание и ограничения в соответствии с вашими требованиями, но для того, что я поняла, это следует сделать.