It sounds like all the processing is occurring on the local machine, which means it is bringing back the millions of records to the report, then filtering out.
You can handle this one of several ways. The best way would, if you are on 10 or XI is to take the current query from the show sql query, copy it and then put it in the sql command. Then apply a filter through there.
You could also be correct in saying that the view is an on demand view. If so, and you access this view on a regular basis, I would ask the dba to make it a view that is refreshed before anyone gets into work and accesses, that way the view is run for that day and the query sent back by Crystal no longer triggers the view to run at runtime.
The combination of both of those will optimize your report considerably.
Last tip, in the show sql query box, if you don't see a where clause with the filters from the select expert for records, this will cause everything to come back to the report, wherever it is located and process there. Making a report that might take less than 5 minutes, now a report that could take an hour or more.