If the GROUP_CONCATs are definitely the culprit then you could consider having a dedicated index table which pre-builds all the concatenated strings into columns.
The index table would be a copy of the data from the other tables in your query above, but would already have the data formatted as required. You would have a script which can build this table at any time (could run every hour, for example to re-build).
You can then query this index table instead from the frontend for much faster querying.