Ciro Immobile put the hosts ahead in the fifth minute but two goals from Jonathan Cristaldo handed Bologna victory in the 24th minute.
Toro were twice denied by the woodwork as they fell to their first home defeat since September 29.
The outcome has lifted Bologna to 16th place, four points clear of 18th-place Livorno, who take on Genoa later on Sunday.
Torino are seventh but could fall to ninth if nearest rivals Parma and Lazio win their respective games on Sunday.
Bologna went into the encounter without top scorer Alessandro Diamanti following his move this week to Chinese side Guangzhou.
It was the home team that took an early lead when Immobile headed Mattia Darmian's cross past Bologna goalkeeper Gianluca Curci.
Bologna restored parity in the 11th minute when Cristaldo received the ball in the heart of the area and smashed it into the bottom right-hand corner to leave Toro goalkeeper Daniele Padelli well beaten.
The visitors continued to press forward and were rewarded shortly after when Padelli failed to hold onto Rene Khrin's bullet strike, leaving Cristaldo with an easy tap-in.
Torino nearly pulled level in the 30th minute but Kamil Glik's shot hit the post with Curci already beaten.
The hosts thought they had equalised six minutes into the second half when Alessio Cerci headed Emmiliano Moretti's cross past Curci, only to see his attempt hit the crossbar.
With five minutes remaining, Curci was forced to fully stretch to clear Cerci's 30-yard free-kick.
Bologna held on for their second win on the road this season.