Radio buttons have two chief advantages over combo boxes:
They’re faster for the user, being selected with one click rather than two. A typical click takes 1.2 to 2.4 seconds. Translate that into equivalent CPU cycles and you see that a little work optimizing the UI is worth a lot of work optimizing the code.
They provide better self-documentation of the control without having to click anything. Seeing all the options rather than just the default tells the users more about whatever they’re seeing or setting. For example, seeing “Answer Type: Right” is ambiguous while seeing “Answer Type: “(o) Right – ( ) Left” is better. Seeing “Priority: High” has different implications than seeing “Priority: ( ) Critical – (o) High – ( ) Medium – ( ) Low”
Both radio buttons and combo boxes show the user the current selection.
From the user’s standpoint, the only disadvantage of radio buttons are the screen real estate they consume. Thus, radio buttons are preferred over combo boxes unless the real estate is better used for something else. This holds irrespective of the number of options, although, obviously, the more options you have, the greater the chance there’s something better you can use the real estate for.
The only other consideration is that if you have a large number of options (say, 10 or more), combo boxes make it easier to read the current value, since the user doesn’t have to visually search a good portion of the page/window to find it.
As for the work necessary for programmatically adding options, my philosophy is that programmers should work hard so users don’t have to.
Disabling provides vital information to the user and should never be avoided because it’s “ugly.” Disabling is not equivalent to removing. Disabling suggests something unavailable can be made available, while removing suggests it’s never available. That it’s not possible to disable an item in a combo box list is another disadvantage of combo boxes over radio buttons.