You should reconsider if it really makes sense to display 2,5 million records at once in a DataGrid. Who is supposed to read through it before falling asleep? ;)
However, if you really want to proceed with that idea: You can't stream the whole DataSet at once and display the arriving "parts" of it incrementally. In order to reconstruct an object, it has to be received fully. Instead you have to modify the service to send the records in pages and then add these to the data source of the data grid as they arrive or (if you're talking Windows Forms and DataGridView here) use the DataGridView in
VirtualMode[
^].
For this you can but don't have to use WCF-streaming. I found an MSDN-Blog that might be helpful:
Custom WCF Streaming[
^]