Williams (8-10) struck out three and issued no walks in his third win in three starts.
Ernesto Frieri wrapped up the win his 34th save, pitching the final two innings as the Angels took the rubber match of a three-game series.
Josh Hamilton and Andrew Romine each drove in a run for Los Angeles, which logged its fifth win in six contests.
Houston's Paul Clemens (4-5) was tagged with the defeat despite yielding just two runs on six hits.
Marc Krauss homered for Houston.