Cleveland took a three-run lead into the ninth inning, but the Twins scored twice in the frame and had the potential tying run on first base when Chris Perez struck out Rene Tosoni to end the game.
Santana hit his 24th homer in the second and Cleveland built a 5-0 lead through four innings.
Lonnie Chisenhall had three hits and drove in two runs for the Indians and Thome gave the Indians a 7-4 cushion in the top of the ninth with his 14th homer.
Ubaldo Jimenez (4-2) went 6 1/3 innings to get the win, allowing three runs on five hits. Only one of the runs off Jimenez was earned. Perez captured his 33rd save despite a rough ninth.
Kevin Slowey (0-6) remained winless by giving up five runs on seven hits in four innings. He has started 88 games for the Twins over five seasons and this is the first time he has lost six in a row.