Several potential issues.
An important one is that the actual field names generated by the crosstab
will depend on the data. Therefore Access has to actually run the query,
even to figure out what field names you need for report design view. Worse,
some of the fields you expected it to generate may not have data, and so the
column is not in the query and the report just shows an error. To avoid
these problems set the Column Headings property of the crosstab, so it knows
the names of the column headings ahead of time.
That issue is worsened if Name AutoCorrect is turned on, because Access must
also dynamically track the names of objects with any previous names they may
have had. This is not only time-consuming, but Access is likely to get
completely confused if different things have had the same names. To avoid
this, uncheck the boxes under:
Tools | Options | General | Name AutoCorrect.
Then compact the database:
Tools | Database Utilities | Compact
If it is still slow or unstable after that, you may need to go a step lower,
and look at the crosstab itself.