Company::with([
	'departaments' => function (HasMany $q) {
		$q->whereHas('workers', function (Builder $builder) {
			$builder->where('email', 'like', "%{$this->searchTerm}%");
			//остальные фильтры по workers
		});
	},
])->whereHas('departaments.workers', function (Builder $builder) {
	$builder->where('email', 'like', "%{$this->searchTerm}%");
	//остальные фильтры по workers
})->get();
Думаю что-то такое, но на работоспособность не проверял.
Смысл в том чтобы "жадно" загрузить только те департаменты, какие нужно. Для этого юзаем with(), в который передаём callback под ключом departaments
Дока: 
https://laravel.com/docs/9.x/eloquent-relationship...