Let*s start from the end:
we currently have intel xeon quad core
2.4ghz with 4gb of ram.
This possibly is the culprit here. 4gb of RAM is a joke for a quad core, especially if handling thousands of parallel requests. 4096mb RAM by 2000 requests (lower definition of thousands) leaves 2mb RAM per request (ingnoring all else).
You definitely dont havrve a MySQL problem ONLY. The main problem is that you need a complete infrastructure that allows handling many thousand doswload requests per second (or need someone clarifying your post), which means a lot of network bandwith, a lot of IO bandwidth, and a server with a lot more ram than - sorry - a cheap outdated low end workstation (quite like that - my developer workstation had 4gb about 3 years ago, recently moving to 8gb). You also will need an IO subsystem to handle the load, which possibly means many many many discs in a nice hardware RAID controller (forget software here - you want something with more features than your software raid).
HTTP Load balancing: easily dable, either in software or in Hardware (F5 has some hardware for that). Depending on your programming (sessions) you may need sticky sessions so the same client ends up on the same box again.
First step would be separating out the download files from the actual website (separate sdomain / subdomain) and in the next process mving them to separate servers. The MySQL Database (well, the database - this is in no means specific to MySQL) can go to a separate server, too.
2000 requests per second is not something that needs multiple servers unless the requests are complex, which they most likely are not. The main limitation on that performanc eis most likely the IO side. In your case I bet you couple the 4gb RAM with a low end disc subsystem. To give you an idea of how a db server mayl ook like - my own main databas (storing financial data) has about 10 high speed discs (Velociraptors, 10k RPM) to make sure the database (in my case a SQL Server) does not turn into the bottleneck. I still have performance issues on the IO side... so I will move some stuff to SSD now likely. Technically, unless doing only rporting from in memory (which is very unlikely with your 4gb ram shared for eveything setup) the IO subsystem is the main limitation for databases.
At the end, a lotdepends on your programming. You will not ind a decent answer hwere - this requires a lot of planning, looking at your code.