Silva curled home the opening goal from outside the area in the 14th minute, just as City was reorganising following a straight red card to Kompany for a professional foul on Nikica Jelavic in the 10th.
City's defence, often criticiced this season, held firm and Silva set up Dzeko for the second in the 90th minute.
Manuel Pellegrini's team reduced the gap to Chelsea to six points with two games in hand. Chelsea plays later Saturday at Aston Villa.
City were playing three days after losing to Barcelona away in the Champions League in the last 16, so the last thing the visitors needed was to be reduced to 10 men early on.
But that's what happened when Kompany was dispossessed by Jelavic about 40 metres out from his own goal and proceeded to tug at the jersey of the Croatia striker.
As he was the last man, Kompany had to go and, having already shown his frustration on the pitch, he kicked out at a wall in the tunnel as he walked back to the dressing room.
Pellegrini reacted by dropping holding midfielder Javi Garcia back into defence alongside Martin Demichelis but the changes had no adverse effect, with City going ahead four minutes later.
Yaya Toure slipped a short ball through to Silva, who curled a brilliant shot inside the post from 25 yards.
Pablo Zabaleta almost doubled the lead when he sent a dipping volley against the underside of the bar in the 31st minute. From then on, it was mostly Hull on the attack, without seriously testing City goalkeeper Joe Hart.
David Meyler had a goal disallowed for offside, Jake Livermore shot just wide from 20 meters and, just after the break, Jelavic didn't get enough purchase on a free kick as Hart easily saved.
Fernandinho spurned a great chance for the City in the 72nd when he ran onto Silva's deflected shot, but all alone in the penalty box, he screwed a left-footed shot wide.
Minutes earlier, Hart escaped a red card after motioning his head toward George Boyd after the Hull midfielder tumbled under a challenge by the goalkeeper. Hart was booked.
Dzeko, playing on his own up front in the absence of the injured Sergio Aguero, grabbed his first goal in nine games in all competitions with a fierce left-foot shot with seconds left in normal time to end Hull's hopes of a point.