Adrian Zaugg took the lead early on before a collision with Roldan Rodriguez set up a battle between Villa and Adam Carroll.
But it was another poor day for championship leader Timo Glock who failed to score again.
Villa lost his lead at the start as Zaugg alongside him made the better getaway. Carroll also made a good start to take fifth before passing Borja Garcia at turn four.
Another driver making passes at the start was Rodriguez, who lunged past Villa at the chicane to take up second.
Garcia continued to fall backwards, being passed by Lucas di Grassi and Andreas Zuber on the second lap. Kazuki Nakajima was also going backwards, being passed by Glock and Giorgio Pantano.
That left Zaugg leading Rodriguez, Villa, Carroll, di Grassi and Zuber. But Zaugg was holding them all up – the top four covered by less than a second by lap eight.
Zaugg was defending his lead with exceptional force. He moved fully over to the inside of turn one to cover from Rodriguez on lap seven.
Two laps later Rodriguez got alongside on the way into turn two but Zaugg gave him no rom and the pair inevitably made contact. As they ran wide Villa and Carroll passed and Rodriguez recovered to take third as Zaugg tumbled down the order.
Villa once again proved that there is nothing he does better than lead a race, as he maintained a one second advantage over Carroll, occasionally upping his pace in response to pressure from the FMS driver.
Behind them the order was much less disciplined. Giorgio Pantano pushed Kazuki Nakajima wide as he tried to pass at turn one. Nakajima then caught Zaugg and tried to make the same pass Rodriguez did – with the same consequences.
That ended Zaugg’s race and Nakajima continued, although he was passed by the Durango pair of Garcia and Karun Chandhok, and was left to battle Pantano once again.
On lap 17 Zuber spun out of fifth behind di Grassi. That allowed Glock to take the place behind his championship rival but on lap 23 he spun out at the same turn as Zuber had. But there was clearly a terminal problem with Glock’s iSport car and the championship leade retired in the pits on the next lap.
The final change in the top six came on the final lap when Chandhok sun out of sixth. That allowed Zuber to take the final points-paying position.
Villa came under some late pressure from Carroll but rebuffed it with ease to score his third victory of the season – all of which have come from pole position in the sprint race.
Carroll can take satisfaction from a strong weekend that yielded a first and a second place, and Spaniard Rodriguez took his first GP2 podium.
Di Grassi, fourth, has again cut into Glock’s championship advantage despite not having won a race so far this year. Garcia and Zuber claimed the final points.
GP2 Media Service / Alastair Sately