Without altering the stored procedure code your options are pretty limited.
You could do
CREATE TABLE #results(
[rownum] [int] identity(1,1) NOT NULL,
...Other Columns matching stored procedure result format
)
insert into #results
EXECUTE dbo.the_sp
SELECT * FROM #results
WHERE rownum BETWEEN 50 AND 100
Obviously it will still end up doing the same amount of work in the stored proc itself (and add some overhead for the temp table step) but it will reduce the amount of results going back to the client.
To mitigate this, and dependant on the stored procedure logic, you might be able to use
SET ROWCOUNT 100
EXECUTE dbo.the_sp
To stop it returning unneeded results belonging to pages after the one being displayed
But as this will apply to every statement in the stored proc (not just the final one returning results to the client) this may well not be suitable.