Millwood (1-3) hit Vladimir Guerrero with a pitch in the first inning and allowed a leadoff double to Jose Molina in the third -- and that was it over eight innings before Bob Wickman worked the ninth for his ninth save.
Millwood struck out eight and retired the last 18 Angels he faced, lowering his ERA to 3.38 and getting his first American League victory and 99th of his career.
"He was outstanding," Eric Wedge told reporters -- though the manager watched most of the game on TV in the clubhouse after being ejected in the fourth inning.
"He stepped it up a notch and commanded the ballgame. He was able to do whatever he wanted -- a great performance.
"He was a little tired there at the end, but what a great effort."
Millwood, signed as a free agent last winter by the Indians, pitched a no-hitter in 2003 for Philadelphia against San Francisco. He also pitched two one-hitters for Atlanta -- in 1998 against Pittsburgh and in the 1999 NL playoffs over Houston.
Travis Hafner put Cleveland ahead with an RBI single in the first inning off John Lackey. Coco Crisp hit his second homer in the third inning and Ron Belliard hit his sixth in the fourth.
Wickman gave up a one-out single to Chone Figgins that glanced off the glove of second baseman Belliard. With two outs, Guerrero lined a drive to left-center that Grady Sizemore tracked down for the final out.
Wedge was ejected by home plate umpire Angel Hernandez for arguing that Jhonny Peralta was hit by a pitch. Television replays and still photos showed the ball apparently glancing off Peralta's left hand.
"He said it hit the bat," Wedge said of Hernandez. "Obviously, I didn't agree. I'm not saying it might not have hit the bat, but I think it hit his hand first."
CLASS AAA BUFFALO (17-13) won its fifth straight, a 6-1 victory in Durham as Jake Gautreau (.275) drove in three runs. Jeremy Guthrie (2-4, 7.11 ERA) was staked to a 4-0 lead before he threw a pitch. Brandon Phillips (2-for-5, .246) led off the game with his fifth homer. Jody Gerut (1-for-4, .217) then doubled and Ryan Garko (0-for-4, .309) was hit by a pitch. One out later, Andy Abad (3-for-4, .265) singled to load the bases. With two outs, Gautreau hit a two-run single and Jake Thrower (2-for-4, .197) singled home another run. Guthrie gave up three hits and three walks over six scoreless innings, striking out four. Kaz Tadano (2.39 ERA) gave up one run in two innings and Fernando Cabrera (1.98 ERA) worked a scoreless ninth. Former Indians catcher Tim Laker (.290) went 1-for-3 for Durham.
CLASS A AKRON (18-11) won in Erie, 8-3, as Jason Cooper, Pat Osborn, Scott Youngbauer and Jon Van Every hit homers. Cooper (1-for-4, .234), who was named the Eastern League Player of the Week earlier in the day, hit his fifth homer in the fourth inning. Van Every (2-for-4, .233) hit a two-run shot, his third, in the second. Youngbauer (2-for-3, .238) and Osborn (2-for-3, .264) hit solo shots in the eighth, their fourth and first of the season, respectively. Billy Traber (1-1, 3.97 ERA) gave up three runs and eight hits over 6 1/3 innings. Travis Foley (7.36 ERA) worked a perfect 1 2/3 innings and Todd Pennington (3.27 ERA) one perfect inning of relief.
CLASS A KINSTON (18-12) lost at Potomac, 10-7. Caleb Brock (2-for-4, .317) hit his second homer, while Kevin Kouzmanoff (2-for-4, .352) and Chris De La Cruz (1-for-4, .243 each drove in two runs and Ryan Goleski (.232) went 2-for-5. Rafael Perez (4-1, 2.45 ERA), had his first bad performance of the season. The lefty, who came into the game with an 0.79 ERA, gave up seven runs on seven hits and four walks over three innings. Juan Lara (3.00 ERA) didn't do much better, allowing three runs (two earned) and five hits over 2 2/3 innings before Edward Mujica (4.35 ERA) struck out three in 2 1/3 perfect innings.
CLASS A LAKE COUNTY (16-14) lost in Asheville, 6-5, on an unearned run in the bottom of the ninth inning. The Captains' Kyle Collins (1-2, 0.61 ERA) issued a one-out walk to Jose Valdez, who then stole second and continued to third on a throwing error by catcher Wyatt Toregas. Valdez then scored on a suicide squeeze bunt by John Restrepo. Captains starter Reid Santos (9.10 ERA) gave up five runs on six hits and three walks over five innings before T.J. Burton (4.76 ERA) pitched two hitless innings. Outfielder Mike Conroy, activated earlier in the day when Jose Constanza was put on the DL with a broken right index finger, went 3-for-4 in his season debut for Lake County. Toregas (.250) went 2-for-5 and Brian Finegan (.229) 2-for-4.