Optimize multiple group_concat
You are generating logically unreasonable cartesian product and then technically "fixing" it with DISTINCT (If you survive the generated set volume).
Yes, sub-queries is definitly the way to go here.