Если время конкретного автобуса, прибывающего в определенный город, составляет только одну запись, вы можете попробовать это, или оно вернет максимальное время прибытия и максимальное время отправления.
Это объединит две записи вместе (bus_1 до A и bus_1 до b) и выберите максимальное время в качестве времени прибытия или отправления:
$departure_citys = Departure::where('city',$request->origin)
->selectRaw('id,
bus_id,
city,
time AS time_departure,
NULL AS time_arrival');
$arrival_citys = Departure::where('city',$request->destination)
->selectRaw('id,
bus_id,
city,
NULL AS time_departure,
time AS time_arrival');
$departures = $departure_citys->unionAll($arrival_citys);
DB::table(DB::raw("({$departures->toSql()}) AS tr"))
->mergeBindings($departures->getQuery())
->groupBy('city')
->selectRaw('bus_id,
MAX(time_departure) AS time_dept,
MAX(time_arrival) AS time_arvl')->get();