Castro's home run came in the second inning and Johnson added his in the third, to hand the Cubs their season-high seventh loss in a row.
Jed Lowrie homered for the second straight game, hitting a solo shot in the seventh inning to give the Astros three homers in a game for the second time in three games.
Norris (5-1) allowed five hits with eight strikeouts in seven innings. He has allowed just one earned run in his current four-game winning streak.
Cubs starter Matt Garza (2-2) yielded five hits and season-high seven runs in three innings - his shortest start of the season.
Johnson hit a two-out single in the second inning before a walk by J.D. Martinez to set up Castro's homer, which broke an 0-for-9 streak. His first home run of the season landed several rows up in the lower deck in right field, where a man wearing a Cubs shirt fell backward trying to catch it, to put Houston up 3-0.
Lowrie singled in the third and later stole second base and advanced to third on an error by catcher Koyie Hill. He scored on a single with two outs by Carlos Lee to make it 4-0. Brian Bogusevic walked before Johnson's 429-foot shot to the deepest part of the park in center field pushed Houston's lead to 7-0.
Chicago didn't score until the ninth inning when reliever Enerio Del Rosario allowed three straight hits, capped by an RBI single by pinch hitter Reed Johnson to make it 8-1. He was replaced by Fernando Abad, who gave up a run-scoring single by David DeJesus.
Wilton Lopez replaced Abad with one out before Blake Lalli got his first major league hit with a two-out, two RBI single to make it 8-4. Joe Mather's flyball to Travis Buck ended Chicago's threat.
DeJesus walked to start the fifth inning before Norris retired the next eight batters, striking out four. He didn't allow another man on base until DeJesus singled with two outs in the seventh inning, but he struck out Tony Campana to end the inning.
Campana walked in the first and stole second and third base. But the Cubs came away empty when Bryan LaHair struck out to end the inning. Ian Stewart walked with one out in the fourth and reached third on a single by Hill with two outs. He was left stranded when Norris retired pinch-hitter Jeff Baker.
Notes: Cubs manager Dale Sveum said catcher Wellington Castillo, who has a sprained knee ligament, was doing better on Monday, but wasn't healthy enough to return to the lineup. ... Houston optioned RHP Jordan Lyles to Triple-A Oklahoma City and recalled Del Rosario to take his spot on the roster on Monday. ... Astros CF Jordan Schafer missed his second straight game since injuring his lower right leg avoiding a collision Saturday night. But he said before the game that he was OK, and manager Brad Mills expects him back in the lineup Tuesday. ... Chicago left-hander Travis Wood is expected to be recalled from Triple-A Iowa on Tuesday to start against J.A. Happ when these teams play Game 2 of the three-game series.