Earlier quoted context omitted.
I would prefer a system where the candidate can leave the job immediately, or worst case, after 3-6 months of arriving in the US. The company that does the sponsoring should not have the power to hold on to the employee. If the candidate can stay employed in his/her field and average[1] the salary filled on the non immigrant application sheet for 4 out of the 5 year period, then, regardless of company, the green card…
Once you're on an H1-B visa, transferring it to another company is quite a bit easier, and NOT subject to the quotas. It's completely doable. The only downside is that processing the visa transfer takes time. Nowhere near the amount of time it takes to get a new visa, of course, but it's still longer than a two week notice.
For instance, registered nurses and dental hygienists in the bay area earn a bit more and a bit less than application developers, respectively. Under the H1B terms, it would be difficult for a programmer to become a physician, lawyer, nurse, dental hygienist, mortgage broker, or many other jobs. As a result a salary and prospects gap can emerge between programming and these fields - increasing the probability that those people with freedom and choice will avoid programming (and ensuring that the "shortage" continues decade after decade).
Truth is, visa programs that are designed to target specific jobs or industries by allowing workers only to work for a specific employer or in a specific field are likely to end up badly distorting labor markets.