A) I don't think it makes me buy more. Like I mentioned before, it's like a milestone, just like post count or reputation points. If my post count and reputation would reset every year, I'd probably stop posting in the forum. The same is for charity ribbons, except you feel much better collection charity ribbons.
B) There are other ways to solve this problem. Here are some ideas:
1. Show only, say, 20 ribbons and add a javascript link "Show other 256 ribbons this member has". That would be very easy to implement.
2. Like I mentioned before, you can add option "show charity ribbons: yes/no" to UserCP. I personally like to see all charity ribbons even if they take a lot of my screen space. If somebody has problems with ribbons - they can turn them off.
3. Group ribbons. Show a number of how many ribbons of each separate kind member has.