Marco Motta cancelled out Adem Ljajic's first half opener, before substitute Lazaros Christodoulopoulos struck a debut goal to move the Rossoblu eight points clear from the drop zone.
It could have been 1-1 after just five minutes. Gilardino dispossessed Giulio Migliaccio and Manolo Gabbiadini fired a shot off the post. Moments later, Borja Valero opened up the Bologna defence and Ljajic pulled back for Ivan Cuadrado to somehow miss a three yard tap in. On the quarter hour mark, Stefan Savic and Viviano's hesitancy to clear the ball let in Gabbiadini, but his weak header was easily saved.
Fiorentina hit their hosts with a fast counter attack to take the lead on 27 minutes. Migliaccio spread the play from the right hand side, Stevan Jovetic's clever dummy found Alberto Aquilani, and his lay off allowed Ljajic to slot home from ten yards.
Gilardino couldn't quite stretch far enough to stab home Gabbiadini's inviting ball across the box. Migliaccio then allowed Archimede Morleo's cross to creep under his legs and Viviano was called into action to palm Gilardino's shot wide from ten yards.
Fiorentina began the second half in the ascendency. Migliaccio teed up an off-balance Aquilani to fire over, before Ljajic was allowed to run and lash a swinging shot wide. Gianluca Curci had to run out to intercept a dangerous through ball for Migliaccio.
Cuadrado picked up a costly booking for a foul on Morleo. Not only does it rule the Colombian out of Fiorentina's game with Chievo Verona, but it led to Bologna's equaliser. Alessandro Diamanti picked out Motta, who ran past four static white shirts to nod past Viviano for his first goal in a Bologna shirt.
Neither side were prepared to settle for a draw. Cuadrado and Diamanti both watched inviting low crosses come to nothing, while Nicolo Cherubin intercepted Migliaccio just before the midfielder could head the ball towards goal. Diamanti was at the heart of each Bologna foray forward. His short corner found the feet of substitute Saphir Taider, who curled a low effort just wide.
January signing Christodoulopoulos came on and prodded Morleo's cross over as he leaned backwards and went to ground. The Greek striker went one better six minutes from time. Diamanti's dogged resistance rescued a ball out wide and his cross was only half cleared by Savic. The ball fell to the former Panathinaikos striker on the edge of the area and he blasted a half volley past Viviano into the bottom corner.
Vincenzo Montella left it late to make his three changes and Luca Toni really should have rescued a point at the death. The substitute was left completely unmarked, but he somehow headed over Borja Valero's cross from six yards.
Bologna: Curci; Motta, (Garics 73) Antonsson, Cherubin, Morleo; Perez, (Taider 48) Krhin; Diamanti, Kone, Gabbiadini; (Christodoulopoulos 69) Gilardino
Fiorentina: Viviano; Tomovic, Rodriguez, Savic, Pasqual; (Larrondo 89) Aquilani, Migliaccio, (Toni 86) Borja Valero; Cuadrado, Jovetic, Ljaijc (Sissoko 83)
Goals: Ljajic 27 (F) Motta 58 (B) Christodoulopoulos 84 (B)