An alternative to a UNION sub-query is to make the main query into two parts with a UNION between:
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
It is not clear that this would give significantly different performance. If anything, it would be worse since it involves two scans of the Inspectors table, but that isn't likely to be very big so it may not matter very much. Your UNION sub-query minus the ORDER BY is likely to be as good as or slightly better than this. Your ORDER BY on a non-selected field is problematic in the inner query; and needs careful handling in the UNION I'm proposing (probably by selecting the extra column).
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;