System.cfg loads earlier, might get modified by the game, and settings might be overridden by in-game menu settings. Autoexec.cfg loads last after all game menu settings, and is a user-created file which the game shouldn't ever write to (it doesn't exist by default).
Generally I think it's better to use autoexec.cfg, although there may be some settings that need to be in system.cfg in order to work properly (for example, they may need to load early if other game systems need to refer to those settings when they start up).
At least that's my understanding of it. Anyone feel free to correct me if I'm wrong or if I've missed something.