How do I seal a large gap between slabs to avoid freeze/thaw heaving?
Based on the pics and the amount of movement alone, I'm guessing that the foundation for this slab was not properly prepared.  I'd wager that someone simply dug a squareish hole a few inches deep, put in boards for forms and poured the concrete.  Looks great for a while, but doesn't do squat to avoid shifting in cold weather when the water freezes.

A proper concrete slab should be resting on footings that go fairly deep into the ground (the further north, the deeper).  Have a look at this image to see what I mean:


Note how the slab itself sits on a concrete wall?  We can't tell how deep it goes from the photo but it should go at least a foot.  This is done around the edges, usually, but alternatively, just like with a paver patio, you could dig out a much larger hole - a foot or more all the way down - and then fill with gravel, covered with cloth covered with sand (compacted at every layer) and the concrete poured on that.  The purpose of that type of foundation is to give adequate drainage underneath so that what little water remains beneath in a freeze/thaw/freeze cycle has room to expand around the gravel rather than heaving it out of the way.
So in short, there's no easy solution to your problem - and no amount of 'sealing' will fix it - water in the ground will get under that porch slab from all edges and continue to lift and move it as it freezes.

Sorry. :(