Marson recorded his first career slam in a five-run Indians sixth inning that knocked the Angels 9 1/2 games out of first place in the American League West.
Torii Hunter homered for Los Angeles. Trevor Bell (2-5) took the loss, allowing two runs on four hits in 5 1/3 innings.
Hunter's home run tied the game 1-1 in the fifth but the Indians scored five in the sixth on Hafner's leadoff homer and Marson's bases-clearing blast.
Kate Middleton recycles dress at movie premiere
Gal Gadot cast as Wonder Woman for 'Batman vs. Superman'