The problem is that the system doesn't know what's important to you. If precedence is given to the foreground, people complain that their background copies take too long. Give precedence to the background, and the foreground stops. Treat them equally and, as you've seen, large I/O can temporarily block foreground applications.
There are different ways of dealing with this. For occasional background processes, you can use ionice. For example:
ionice -c3 tar cvf bigfile.tar bigdirectory/
The '-c3' tells the system to run the I/O as idle (when nothing else is using I/O). This is handy on cron jobs, for example.
You can also change your I/O scheduler if this is a normal activity for you. The scheduler can be set per drive, so for /dev/sda you can see the current scheduler with:
noop anticipatory deadline [cfq]
The selected scheduler is in brackets. For example, you might do better with the deadline scheduler (as root):
echo deadline > /sys/block/sda/queue/scheduler
If that works better for you, you can set it in /etc/rc.local.
More information here