You could use a tool like Scribe to pull the data from your CRM Online database to a local SQL Server instance - then against that database you would not be limited to just use FetchXML when reporting. If you had a large amount of data you were working - say sales data you could use plugins on the records containing the data (like sales order) and when one of those records is created, updated, etc... you could update a custom entity that holds the total of sales order for the month, day, etc,,, whatever increment fits the amount of data. This way some of the aggregation is done before you report tries to retrieve the data and has to crunch a larger amount of records.
Does your report run against the larger recordset within BIDS? You you know approximately how many records you are querying against?