One of the key concepts for optimizing a WordPress site's speed is caching.
I'm talking about server-side cache, not local cache. You can set up your site so your server has a cached version of every page to send immediately when someone navigates to it. This is different from the client-side cache you may be familiar with that exists in most people's browser temp folder on their local machine, after they have visited a site.
Local cache is only useful if you've already been to a site. Again, this is not what I'm referring to. Server side cache makes the site faster, even if you've never been to the site before.
The server side cache on your site simply says, "when someone visits page X, here is a set of files for that page." You may think, "well, of course, what else would it do?" You would be right. In a regular, html site, when you browse to a page, the server instantly sends you the files associated with that page. CMS sites (Joomla, WordPress, Drupal, e-com merce sites) are different though. With them, when you navigate to a page, the server says, "oh, you want page X. Let me check my database. The database says to compose data from these cells on these tables according to this code, draw that up into a file, and send it to you as page X." All of that takes a little while.
To get it to do all that and load quickly, you can add server side caching. That means that the server already has a composed copy of every page ready to go on demand, so it functions more like a traditional html site. Make sense?
The W3 Total cache plugin is a good bet. It's a bit finicky to configure though. If you want to know how we usually set it up, let us know and we'll be happy to share it.