Bird and da Costa streaked away from the field in the early laps, after the Briton had kept his foot in on the grass as both passed a slow-starting Bianchi off the line.
Frijns had a look down the inside of the top two into Turn 1, but slotted into third, while Kevin Magnussen also passed Bianchi.
Da Costa and Bird nearly came to blows at the start, with the Red Bull junior going off track on the inside of Turn 2. The incident was investigated by the stewards, but no action was taken.
Bird then kept his cool as da Costa sat on his tail, and the ISR driver appeared set to close to within nine points of the championship lead. But on lap 20 the Portuguese racer pulled a surprise move into the final chicane to snatch the position.
From there he quickly pulled away, and cruised to a third win of his part-season in FR3.5.
Bird was unchallenged for second, while Frijns came home third. For most of the race that result was set to leave the Fortec driver tied on points with Bianchi, but the Ferrari junior threw that away with a failed lunge on Magnussen on the penultimate lap.
Bianchi, who had lacked speed for much of the race, was one of the quickest cars on track in the closing stages. He reeled Magnussen in, but his attempt at a pass came from a long way back and he couldn't keep his Tech 1 car under control.
As Bianchi spun, Magnussen went wide, allowing a chasing Will Stevens into fourth.
Bianchi rejoined seventh, leaving him four points behind Frijns going into Sunday's finale. Bird is 12 adrift in third, with 25 still available.
Pos Driver Team Time/Gap
1. Antonio Felix da Costa Arden Caterham 4:44.925
2. Sam Bird ISR + 3.724
3. Robin Frijns Fortec + 13.062
4. Will Stevens Carlin + 15.693
5. Kevin Magnussen Carlin + 17.360
6. Kevin Korjus Lotus + 17.837
7. Jules Bianchi Tech 1 + 20.174
8. Aaro Vainio RFR + 38.563
9. Mikhail Aleshin RFR + 40.789
10. Marco Sorensen Lotus + 41.382
11. Arthur Pic DAMS + 41.657
12. Nico Muller Draco + 42.170
13. Walter Grubmuller P1 + 42.701
14. Andre Negrao Draco + 42.927
15. Nick Yelloly Comtec + 47.211
16. Daniel Abt Tech 1 + 57.876
17. Jake Rosenzweig ISR + 1:00.755
18. Carlos Huertas Fortec + 1:01.293
19. Alexander Rossi Arden Caterham + 1:01.697
20. Vittorio Ghirelli Comtec + 1:04.234
21. Daniil Move P1 + 1:04.500
22. Tamas Pal Kiss BVM Target + 1:04.990
23. Yann Cunha Pons + 1:05.356
24. Zoel Amberg Pons + 1:07.588
25. Nikolay Martsenko BVM Target + 1:12.882