Disposing of the DataReader is a good thing, setting it to nothing will not have any impact so you may as well remove it.
It does look more like a SQL issue than a .Net one from the figures you are quoting, I would suggest you run the SQL profiler against the query and see what figures it gives for IO, CPU etc just to get a better feel for what it is doing, also from query analyzer you may want to investigate the graphical execution plan option to see which parts in particular are causing problems. If you can reduce the rows involved by a 'better' where clause then that is probably the first thing to try.