If you have a traditional hard disk drive rather than a solid state drive, the symptoms you describe sound like the early stages of hard drive failure. Some sector that gets read a lot but never written to is failing, causing lots of "slow read" retries, and eventual timeouts/failures. Because it never gets written, the drive never gets a chance to reallocate it. This can cause unbearable slowness and rainbow wheels across all kinds of activities, and persists across reboots (it often causes painfully slow booting as well).
Run the free demo of SMART Utility to see if your hard drive has any Pending, Removed, or Reallocated bad sectors. If it has any at all, it's starting to fail and you should replace it immediately.
Note that Mac OS X's built-in Disk Utility will often say "SMART status: Verified" even when there are bad sectors, so you really need to run SMART Utility, not just Disk Utility. Well, actually, as of Lion (Mac OS X v10.7.x) you can actually get to the underlying SMART error counters in Disk Utility, by clicking on the icon of the physical hard drive itself (not the partitions) and then choosing "File > Get Info...". But the third party SMART Utility does a good job of interpreting the correct counters for you, so I still recommend it.
It is sometimes possible, but not recommended, to resuscitate a hard drive with a small number of bad sectors, by formatting the entire drive (not just the individual partitions) with "Zero Out Data" enabled. This forces every sector to get written to, which allows the drive a chance to reallocate any pending bad sectors. This will probably cause the current crop of bad blocks to be taken care of, but once a drive has any bad blocks, it's probably in a death spiral and shouldn't be trusted.
By the way, it's worth noting that SMART Utility queries the drive's controller and returns results immediately; it doesn't have to waste time testing the entire disk, so there's no time waste involved.
P.S. I used to recommend that people in this situation look in the System Log and Kernel Log for messages something like "disk0s2: I/O Error: UNDEFINED", but I found that that advice was too prone to user error. It's much easier and more reliable to just download SMART Utility and run it.