Вы используете разновидность ужасного antipattern , называемого Entity-Attribute-Value. Вы храните атрибуты в отдельных строках, поэтому, если вы хотите восстановить что-то, похожее на обычный ряд данных, вам нужно сделать одно соединение для каждого атрибута.
Не удивительно, что это создает запрос с 50 объединениями. Это слишком много для эффективной работы большинства баз данных (вы не определили, какую базу данных вы используете). В конце концов вам понадобится еще несколько атрибутов, и вы можете превысить архитектурный лимит базы данных по числу соединений, которые она может выполнить.
Решение: не восстанавливайте строку в SQL.
Вместо этого запрашивайте атрибуты в виде нескольких строк, а не пытайтесь объединить их в одну строку.
SELECT ... FROM tickets t
INNER JOIN ticket_text_fields f ON t.id=f.ticket_id
WHERE f.textfield_id IN (7, 8, 9, ...)
UNION ALL
SELECT ... FROM tickets t
INNER JOIN ticket_date_fields d ON t.id=d.ticket_id
WHERE d.datafield_id IN (434, 435, 436, ...)
Затем вам нужно написать функцию в вашем приложении, чтобы перебрать результирующий набор строк, и собрать атрибуты один за другим в объект в пространстве приложения, чтобы затем вы могли использовать его, как если бы это был один объект.