Besides being random, swap reads are also likely serialized. Take in mind that the VM system is creating the illusion of real RAM, so the userspace process doesn't have any opportunity to optimize access. From it's point of view, it's just RAM, so it has to be read before anything else can happen.
The bad thing about serialized, random reads, is that it has to go full round trip (request, head seek, plate turn, read, response) before it can emit the next IO request.
that means, in the worst case, a single 4KB page per IOP (per thread). Assuming 250 IOPS per spindle, you get only 500 IOPS, 500/s x 4KB = 2MB/s. seems you're still way better than the worst case for your hardware. Probably some readahead page clustering is helping you.