Run query faster, what index to use
I think the main problem is in your table design (many-many redundant values which are prone to typos and other problems).  If you were referencing these values via foreign keys, the table rows would be much shorter - therefore the aggregation could be done on a much smaller dataset and the actual values be added via joins.  (The optimizer takes care of doing this well, you don't need additional magic.  The design change is your task, though :) - see also ypercube's comment above.)

Aside this, in your configuration the work_mem value seems to be very low.  If this is true or not depends on how many rows you get from this query - but as grouping and aggregating involves sorting and work_mem is the place where the data is being sorted, there is a chance that simply increasing this to a (much) bigger value would improve the performance a lot.

Furthermore, an index like

CREATE INDEX idx_emissions_totales_residentiel
ON emissions_totales (schema_source, numreg, annee_ref, type_source_n1, unites)
WHERE schema_source = 'residentiel';


will also help this particular query.  As edze suggested, going to PostgreSQL 9.2 and including 'emi' in the index (as the last column) could also help.