Using temporary and Using filesort are one problem, not two

Seeing both in the Extra column of an EXPLAIN looks like two separate faults to chase. They are one: the GROUP BY built a temporary table of the groups, and because the ORDER BY is on the aggregate rather than on a column, that temporary table then had to be sorted.

EXPLAIN SELECT brand_id, COUNT(*) AS line_count
  FROM order_lines
 WHERE created_at >= '2013-08-01'
 GROUP BY brand_id
 ORDER BY line_count DESCG

        type: range
         key: idx_created
        rows: 184220
       Extra: Using where; Using temporary; Using filesort

No index can supply an ordering by a count that does not exist until the rows are grouped, so chasing the filesort is wasted effort. What can be changed is how big the temporary table is and where it lives: narrow the WHERE so fewer rows reach the grouping, and check SHOW STATUS LIKE 'Created_tmp_disk_tables' before and after — a temporary table in memory is a different order of magnitude from one on disk. A TEXT or BLOB column anywhere in the select list forces it to disk whatever tmp_table_size says, which is the usual reason a query got slower after somebody added a description field. When the group order genuinely does not matter, ORDER BY NULL removes the sort that GROUP BY adds implicitly.