I would probably say something along the lines of the first PP, "No, I will not zip it. His choices are to brush his teeth after eating an onion or no onions." Grandma, I'm sure, wants to spoil him. I'm all for grandma spoilage, but there are still some rules, and I agree with PPs that if your son does not wish to follow the rules, you should perhaps skip lunch at grandma's next weekend, maybe more. This is not a fight I would want to continue having, especially in front of other people. Your request is reasonable. Option number three, when Grandma starts slicing up the onion, tell her please no onions since Son refuses to brush afterwards, or talk to her about no onions ahead of time. I don't know how much I would say to Grandma. I would most likely just avoid going to the house instead having an argument with her. When Son decides he will brush after onions, you can resume the visits. You can tell MIL this as well. "I am not going to have this continued argument with DS, so we won't be coming over this weekend. Next weekend we'll try again and see what happens."
Where is DH on this? Is he backing you up? Refusing to go to grandma's over the onions might result in a fight over this with DH, so you two are hopefully on the same page. This isn't ban Grandma, it's more dealing with your son, which should probably be expressed. I don't really know if I would demand an apology or tell her I don't appreciate being undermined in front of my children, which is why we are stopping visits for awhile, but these are things you can tell her. I would probably just go with, "Until DS decides to brush teeth after the onions, we won't be coming over." I'm leaning in the direction of allowing Grandma to spoil him with fat onion wedges, but son needs to adhere to a simple rule afterwards. Have gum or breath mints available also, and there's also the option of not letting grandma give him onions at all.
MIL was rude, but you really shouldn't be fighting with your son repeatedly in front of her either.