Альтернативой подзапросу UNION является разделение основного запроса на две части с UNION между:
SELECT c.dinsp, c.departure, d.arrival, 'cabin' AS type, i.first_name, i.last_name
FROM cabinets AS c JOIN inspectors AS i ON i.id = c.dinsp
SELECT c.dinsp, c.departure, d.arrival, 'cockpit' AS type, i.first_name, i.last_name
FROM cockpits AS c JOIN inspectors AS i ON i.id = c.dinsp
Не ясно, что это даст значительно отличную производительность. Во всяком случае, это было бы хуже, так как это включает в себя два сканирования таблицы инспекторов, но это вряд ли будет очень большим, так что это может не иметь большого значения. Ваш подзапрос UNION за вычетом ORDER BY, вероятно, будет таким же или чуть лучше, чем этот. Ваш ORDER BY в невыбранном поле проблематичен во внутреннем запросе; и требует тщательной обработки в UNION, который я предлагаю (возможно, выбрав дополнительный столбец).
SELECT c.dinsp, c.date_of_inspection, c.departure, d.arrival, 'cabin' AS type,
i.first_name, i.last_name
FROM cabinets AS c JOIN inspectors AS i ON i.id = c.dinsp
SELECT c.dinsp, c.date_of_inspection, c.departure, d.arrival, 'cockpit' AS type,
i.first_name, i.last_name
FROM cockpits AS c JOIN inspectors AS i ON i.id = c.dinsp
ORDER BY date_of_inspection;