Giovani Dos Santos and Ikechukwu Uche both scored twice for the hosts with Moises Gomez adding a fifth as the Yellow Submarine claimed their first home win in five.
Imanol Agirretxe grabbed a consolation for Sociedad, who saw a five-game winning streak snapped and slipped to sixth in the table, two points behind their opponents.
Bruno had the first chance of the game but Sociedad goalkeeper Claudio Bravo got down easily to claim his close-range effort.
Villarreal were having by far the better of the early stages and it was no surprise when Dos Santos gave them the lead in the 16th minute.
Mario Gaspar found the Mexican in the penalty area and the former Spurs man slotted home low to Bravo's left.
Sociedad needed to get a foot in the game and they nearly found it when Bruno was booked for a foul on Carlos Vela but Antoine Griezmann's resulting free-kick failed to give Sergio Asenjo too much trouble.
Xabi Prieto then brought another save from Asenjo as the visitors grew in confidence but they were hit with a sucker-punch when Villarreal made it 2-0 in the 27th minute.
Dos Santos was involved again as he supplied the cross and Uche stole into the six-yard box to drill home.
And it was 3-0 just six minutes later as Gaspar and Dos Santos combined again with the latter this time finding the top-right corner.
Sociedad would have been glad to see the break but it did not get any better after the interval as Uche made it 4-0 in the 54th minute.
Bravo was called into action again shortly afterwards as he saved a shot from Gaspar but he was beaten for the fifth time in the 58th minute.
Dos Santos was involved yet again as he found Gomez and the 19-year-old made no mistake from 12 yards out.
Agirretxe grabbed a goal back two minutes later as he got on the end of a Vela cross but the game was effectively over as a contest at that point.
Manu Trigueros, Gomez and Javier Aquino had chances to put Villarreal even further ahead before the end with David Zurutuza offering the only response from the visitors.