Как выбрать ограниченное количество записей разного типа?
В MySQL, начиная с версии 8.0, вы можете использовать оконную функцию row_number():
select 
	class,
	price
from (
  select 
	  class,
	  price,
	  row_number() over (partition by class order by price) rn
  from complex
) prices
where 
	(class=1 and rn < 3) -- 2 econom
	or (class=2 and rn < 4) -- 3 comfort
	or (class=3 and rn < 2) -- 1 premium
;

Mysql online
С точки зрения пользовательского интерфейса это полная хрень, конечно, но решается довольно легко - нужно просто сделать 4 запроса и не пытаться объять необъятное. Полученные данные объединяете в один массив и всё - страница готова.

А что вы будете делать, когда страницы с премиумом закончатся, а экономы ещё нет?

Если очень уж необходимо сделать именно так, то приемлемый пользовательский интерфейс в данном случае был бы таким: 4 отдельных таблицы, по одной для каждого типа, и под ними один на всех блок пагинации. В качестве количества страниц в нём используется максимальногое значение среди указанных типов. Когда для какого-то типа данные заканчиваются, выводится сообщение об этом, остальные таблицы рендерят данные. И в итоге у вас будет 4 пагинации на бэкенде и один контрол для них на фронте. Валить данные в одну таблицу, когда пользователь явно указал, что хочет сортировать по цене - это ад. Я ещё понимаю, была бы сначала сортировка по классу, а потом по цене, здесь был бы хоть какой-то смысл, хоть это и не то, чего хотел пользователь.