Williams (2-1) yielded two runs on seven hits, issuing just one walk while striking out three in his second start since being promoted to the Angels' rotation.
Scott Downs and Garrett Richards combined for 1 1/3 scoreless relief frames and Ernesto Frieri racked up his seventh save for the Angels, who downed the White Sox for a second time in their three-game series.
Trout's two-run blast in the first inning gave Los Angeles an early lead and Albert Pujols slid home on a passed ball in the third to break a 2-2 tie, providing the decisive run.
Chisox starter Jose Quintana (2-1) took the loss, allowing three runs (two earned) on five hits in a six-inning effort.
Dayan Viciedo went 3-for-3 with a run scored while Alejandro De Aza and Tyler Greene each drove in a run for Chicago.