The effect you're seeing is definitely caused by the NTSC signal and the general quality level of the composite signal from the TI's video port. I first noticed it in Parsec, where the little landscapes seemed to be rainbow colored, but in fact, weren't!
I've dealt with this when drawing up all the graphics for my CRPG, you can check my thread in Development to see some pictures of my in-game monster graphics, all of which are in bitmap resolution, with 2 colors every 8 pixels horizontally.
First thing is, NTSC seems to work better with a lower pixel depth horizontally. If you have at least two pixels of the same color next to each other, they are strong enough to overcome all the noise and clearly project a color. (So 100-150 pixels works fine, but over 200 has trouble.) This isn't JUST on the TI, you can see it on other systems too. Most of the color artifacting of the TRS-80 Coco, Atari 8-bit, and Apple II systems were built around burning two pixels to get extra colors.
Second, What I've come to discover as I've worked with it is this: luminosity almost matters more than color itself. Putting two bright colors next to each other makes it almost impossible to discern both. So you want to have light and dark respectively alternating, or you get things looking a little muddy.
Three, the 2 colors per 8 pixels is not THAT bad of a limitation, given the noise of NTSC. Many times I've used a color which technically creates a bleed effect, but on the NTSC screen you can't really perceive it, so it works. On the other hand, I've seen some interesting patterns where a fully yellow object with just ONE line of blue in the center suddenly looks greenish overall on the screen. Almost like the color signal, swapping between colors, has trouble keeping up.
Finally, some interesting oddball observations... Light red and magenta actually compliment each other REALLY well, not a combination you'd expect to work. Medium red and green are nearly useless; neither is strong enough in luminosity to really separate from their light and dark counterparts. And why a dark and light yellow? I would have rather TI given us a true brown, dark grey and dark purple instead. Dark red is your best "brown" color, although if your user has his monitor contrast turned way up it won't look like it. Dark blue is your best "dark" after black, it's dark enough against black pixels nearly disappear. Grey is really just "off-white"; if you want something closer to halfway between white and black, use light blue. Cyan is so much brighter than the other blues it's not particularly useful as a gradient, but in some cases it can work; your mileage will vary.