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.