The Dutchman, whose team were not competitive in the first two races of the season, was 0.110 seconds clear of the three-time world champion.
Both left it late to depose Ferrari's Sebastian Vettel, who had looked set for a clean sweep of practice sessions.
The four-time champion ended up 0.556secs off the pace.
Despite the larger than expected gap between the top two and the rest, there is expected to be an intense fight for superiority in qualifying at 16:00 BST.
Mercedes, Red Bull and Ferrari have been closely matched so far this weekend and the final practice session is not generally representative of form.
The conditions in the intense desert sun are very different from those the drivers will encounter in qualifying and the race, which start at dusk, when temperatures begin to drop.
This could have had an influence on the margin between Verstappen, Hamilton and Vettel, as the first two set their times a good 10 minutes later in the session at a time when the sun is beginning to dip in the sky.
Vettel was just 0.004 seconds quicker than Mercedes' Valtteri Bottas, with the second Ferrari of Kimi Raikkonen fifth.
Red Bull's Daniel Ricciardo, out at the same time as Verstappen, could manage only seventh.
The session was punctuated by a crash for Haas' Romain Grosjean.
The Frenchman ran wide on the exit of Turn Four, lost the rear of the car and spun across the track into the inside wall, taking off the front wing and damaging the nose.
Williams' Felipe Massa headed the midfield runners in sixth - 1.1secs and eight places ahead of rookie team-mate Lance Stroll.
McLaren's Fernando Alonso, who has been the talk of the weekend after the announcement he will race at the Indianapolis 500 instead of the Monaco Grand Prix, was 12th fastest, three places but just 0.1secs clear of team-mate Stoffel Vandoorne.
Red Bull's Max Verstappen was a surprise pacesetter from Mercedes driver Lewis Hamilton in final practice at the Bahrain Grand Prix.