The hosts took the lead just after the half-hour mark when Andoni Iraola found Mikel Rico in the middle of the box with a cross, allowing the midfielder to plant his header into the bottom left corner.
Bilbao doubled their lead just two minutes later when Aritz Aduriz fired a low shot from the edge of the area into the same corner that Rico had found moments before.
Villarreal's evening went from bad to worse on the stroke of half time when Bruno Soriano was given his marching orders having picked up a second yellow for handball.
Markel Susaeta almost made it 3-0 in the 58th minute when he got on the end of Aduriz's cross, but he could not steer his effort on target from close range.
Bilbao comfortably saw out the closing stages to record their first win in three games, while Villarreal missed the chance to close the gap between themselves and third-placed Real Madrid to two points.