Hi Karan,
Well firstly if your report can return up to a million rows, I'd certainly look at making sure that performs well, especially if you are planning on offering the result synchronously!
In order to have the report generated asynchronously and made available to several other requesters you'll want to look at kicking off a separate
thread to perform the work and store the result somewhere for later retrieval.