Unless you're anticipating extremely high traffic, this isn't likely to be a problem. This is the standard way pagination is done - if you find you do have performance problems, reconsider the way you're doing things then. There's no reason to prematurely optimize. Don't invite someone to come here and quote Knuth, please!
One alternative is to send more than one page of data to the client at once, and then paginate with Ajax. The drawback is that the first request will take a little longer to create and send, use more bandwidth, and chances are many users will never go beyond page one on a given query.
If you're looking to increase efficiency or performance in general, it's a fairly large topic. You can add indexing, caching, explore alternative data stores, add servers, and so on. You could say, run the query to get 5 pages at once, store the results in memcache, and access those until you need a new 5 pages.
It depends what actually ends up being a bottleneck. Often, it's something different than you expected, and often what works as a solution is unexpected as well.