The Mallards, who are enjoying their first season in the top flight, took the lead just three minutes in, when Ryan Campbell fired home.
Brian McCaul looked to have restored normal service for the Blues with a goal three minutes before half time, but Whitey Anderson's side fought hard to contain Linfield in the second half, and got their reward when Chris Curran found the net in the 80th minute.
Liam Martin sealed a deserved win for Ballinamallard with an injury-time strike to consign Linfield to their third home defeat of the season - they drop to sixth in the table, while the visitors move up to third.
In the game at Seaview Glentoran's unbeaten league record was smashed by Crusaders as the north-Belfast men moved to within a point of their Belfast rivals.
The Glens paid the price for a sloppy first half showing though there wasn't much they could do about Jordan Owens' opener which was a stunning long-range volley in the seventh minute.
Owens then helped himself to a first half brace when he poked in the second from close range in the 35th minute after Gary McCutcheon's shot was deflected invitingly into his path.
The Crues striker has endured a frustrating season until today but he served up a timely reminder of his finishing power.
Glens keeper Elliott Morris made a superb block to foil Chris Morrow and the visitors' misery was compounded when Jason Hill limped out of the contest after a firm challenge from Declan Caddell.
Eddie Patterson's men were more lively after the break but keeper Sean O'Neill made two saves to frustrate firstly Waterworth and then a stunning tip over after a close range shot from Colin Nixon in the 66th minute.
The Glens were a more dangerous outfit in the second half but luck was still deserting them when Sean Ward's low drive rebounded off the base of the post.
McCutcheon almost netted his side's third with a shot that curled beyond the upright while Adamson's header from a McCutcheon free-kick floated wide of the post.
Morris then scooped up a free-kick from Morrow and denied Owens his hat-trick but the Crues, who lost Aidan Watson in the first half with an ankle injury, were full value for the win.
Elsewhere leaders Cliftonville predictably won the top-versus-bottom clash with basement side Lisburn Distillery, but it was far from the Reds' most convincing performance of the season.
After an opening half of few chances and little entertainment value for the watching supporters, Liuam Boyce opened the scoring in the 52nd minute when he skipped through the Whites' defence to fire past Lee Windrum.
The Distillery stopper would have wanted to do better with Boyce's effort, and was at fault again for Cliftonville's second, as he could only punch a dangerous ball into the path of Barry Holland.
Gary Liggett scored a consolation for the hosts 12 minutes from time but in truth Tim McCann's outfit never looked like completing the comeback.
Distillery remain rooted to the foot of the table with just one win from their opening ten games.
Coleraine dropped two points behind the Reds after they could only manage a draw against Glenavon.
After the visitors had squandered several great chances, Stephen Lowry had looked to have given the Bannsiders the win with a stunning goal four minutes from time.
However, Glenavon never gave up and a last-gasp equaliser came in the third minute of injury time as substitute Andy McGrory stabbed home from a corner to ensure a share of the spoils.
In the game at Suffolk Road Donegal Celtic picked up a valuable point with a 1-1 draw against Dungannon Swifts.
The Belfast Hoops, whose manager Stephen Small resigned during the week, went behind in the first half when Stefan Lavery latched on to a defensive mistake and lofted the ball over John Connolly and into the net.
Peter Downey equalised for the hosts just before the break, and Dungannon suffered a further blow when Matt Hazley was sent off for a dangerous tackle early in the second half.
However DC failed to capitalise on the extra man and the visitors held out for the draw.
Finally Portadown and Ballymena United shared the spoils after an entertaining 2-2 draw in their game at Shamrock Park.
Mark Surgeoner gave Glenn Ferguson's side the lead with a close-range finish after just three minutes, but Darren Murray latched on to a Michael McLelland pass to score the equaliser, before adding another just after the half-hour mark when he beat Sky Blues keeper Dwayne Nelson to a high ball.
However, Ballymena were awarded a penalty when Alan Teggart was felled in the area, and the midfielder duly dispatched the resulting spot-kick.
Danske Bank Premiership results in full:
Crusaders 2-0 Glentoran
Crusaders: Owens 7 + 35.
Donegal Celtic 1-1 Dungannon Swifts
Donegal Celtic: McCann 45.
Dungannon Swifts: Lavery 14.
Glenavon 1-1 Coleraine
Glenavon: McGrory 90
Coleraine: Lowry 86.
Linfield 1-3 Ballinamallard
Linfield: McCaul 40.
Ballinamallard: Campbell 3, Curran 80, McCartney 90.
Lisburn Distillery 1-2 Cliftonville
Lisburn Distillery: Liggett 78.
Cliftonville: Boyce 51, Holland 70.
Portadown 2-2 Ballymena Utd
Portadown: Murray 14 + 34.
Ballymena Utd: Surgenor 3, Teggart 67.