Есть владельцы, у них директора, у директоров предприятия а на предприятиях рабочие.
Очевидно, по таблице в БД на каждую сущность. Итого что бы узнать какому владельцу подчиняется конкретный рабочий нужно:
SELECT `рабочий`,`id` FROM `рабочие` далее в предприятиях запросить id предприятия которому приналлежит id этого рабочего, потом ещё на уровень выше запросить id директора чьё предприятие, а потом на уровень выше id владельца у котрого в подчинении id выбранного директора.
Как лучше построить такой запрос, подзапросами? Тут будет ведь 3 или 4 уровня вложенности?
Вы так говорите, будто 3 или 4 уровня вложенности - это что-то плохое.
Конечно, можно переписать всё на join'ы, но не факт, что будет быстрее (нужно тестировать на реальной структуре и реальных данных).
Если такие запросы часто используются в приложении - это повод для денормализации таблиц, внесите идентификаторы сквозного владения в таблицы и сократите и время выборки и сложность запроса.