In order to do that you would have to execute the select asynchronously and in the meantime show some kind of indication that the query is in progress.
One way to do the fill asynchronously is to use
BackgroundWorker [
^]. So basically you would put the data adapter fill (or whatever you use) in the DoWork event.
A side note: Since users are typically not very willing to wait for long times I would put most of the effort to enhancing the query performance, if possible and use the progress indicator as 'the last option'. Just having many records doesn't mean that the queries are automatically slow. That maybe for example because of inadequate indexing.