Howto (async?) preview intermediate resultset
What you describe is the default behaviour of SQL Server's query execution and client connection protocols. Rows are delivered to the server's network buffer as they are produced from an executing query plan. The network delivers them to the client, which makes them available to the application.

I think the pause you see is caused by how the application consumes the dataset returned. It's been a while, but I think SqlDataReader.Read() allows stream-like behaviour.

The risk is that the application falls behind SQL Server and the connection and server resources remain locked up until the application explicitly releases them.