Maybe wash the skein of yarn first? I don't know how much that will help with cotton though. I made myself a cotton washcloth with red/white/blue multi (one skein). I've used it several times now and it always runs some when I squeeze it out, mostly see the blue running, but I can tell the red has tinged some of the white. But because of it's design it looks okay like that.
All I can suggest is to do some colorfastness tests or maybe try some other natural fibers like wool, bamboo, alpaca (hypoallergenic) and soy.
Things I have crocheted for charity.