Rookie John Skelton directed two late touchdown drives against the Texans' reserves to give Arizona the victory.
Williams, battling a hip problem, sacked Leinart twice as Houston took a 16-0 lead.
Leinart completed 6 of 7 for 49 yards but, in addition to the sacks, misconnected with Tim Hightower on a handoff, for a fumble. Leinart's backup, former Cleveland quarterback Derek Anderson, threw a 2-yard touchdown pass to Beanie Wells but was intercepted twice.
"Too sloppy," Cardinals coach Ken Whisenhunt said at halftime.
Asked about Leinart's play, Whisenhunt targeted the entire first-team offense.
"I'm not pleased with how our offense performed in general," he said. "It's not so much the quarterback. We had guys the wrong routes, guys in the wrong spot. We had a protection breakdown, not a breakdown but we got beat. All things that we've got to clean up."
Skelton, a fifth-round draft pick out of Fordham, connected with Jason Wright on a 15-yard pass play with 1:53 left for the deciding score. The 6-foot-5 Skelton completed 5 of 6 passes for 84 yards.
The Texans chose not to go for a game-tying 51-yard field goal at the finish.
Houston backup Dan Orlovsky got extended playing time, completing 12 of 21 for 129 yards with no interceptions. He directed a 15-play, 86-yard drive that consumed 7:48 of the third quarter. It ended with Kris Brown's second field goal of the game, a 26-yarder that put Houston up 16-0.
Schaub, who led the NFL in yards passing last season with 4,770, opened the game with a 10-play, 53-yard drive, culminated by Brown's 31-yard field goal. On Houston's second possession, Schaub connected with a wide-open Johnson, whose fake had left Arizona cornerback Justin Miller helplessly in his wake.
Arizona's first possession went nowhere. Leinart and Hightower messed up a handoff for a fumble that loss 11 yards, then Leinart was sacked by Williams for a 12-yard loss. The next time the Cardinals had it, Leinart drove them from their own 21 to the Houston 32, but Jay Feely's 50-yard field goal try was wide right.
Arian Foster started at running back ahead of Steve Slaton for Houston and gained 31 yards in four carries. Slaton rushed 10 times for 22 yards and fumbled the ball into the end zone at the goal line. Arizona recovered for a touchback.
Anderson, signed as a free agent to push Leinart in training camp, completed 13 of 22 for 88 yards and a touchdown, but was plagued by the same issues he had last season in Cleveland, when he was intercepted 10 times, compared with three touchdowns, and lost his job to Brady Quinn.