[...] As an example, I may checkout branch A and make several commits on development of feature A. [...] Then I may switch to release candidate branch C and merge branch B into C [...] Then I switch back to branch A and continue my work on feature A.
>8 ----------------------- 8<
Actually, I'm doing that frequently with CVS: I just create a cvs checkout of branch A in (say) subdir A. Do some work there, possibly regularly check in to the cvs server (or not). Then decide to work on (or first create) branch B: checking this out into (say) subdir B, do the necessary work there (e.g., cmake, build, test, etc.), check in or not, switch
back to subtree A, etc. Eventually remove subtree A or B or both.
All very transparent also with CVS. So for myself I would not need git for this purpose.
Actually, I do this already frequently with vxl (and svn), viz. for the two branches "vxl-build-makefiles" and "vxl-build-dsps".