I came to the US for my MBA (from a good school), graduated in the top 2% of my class with a 3.94 GPA. I got a job with a Fortune 150 company. My starting salary was 94K, and now I make more than 150K. All this happened in the last 4 years.
I am not "cheap labor" and I don't work in IT. I am highly skilled (I'm a lawyer with an MBA - it's not all that common). I have an approved green card application.
But - I'm from India, and there's a LONG line of people ahead of me waiting for green cards. It will take 5-7 years to get a green card. In the meanwhile, I have received job offers where I would get paid more - nearly 200K in one instance. But I'm unwilling to take those offers because it would mean restarting the green card process. There are ways to keep your spot in line, but they aren't foolproof, and for me, it's easier to stay with this company and hold onto my spot rather than take a higher paying job.
So yes, even for people highly skilled and in demand, it's not easy to switch jobs. There are many factors that you have to look at, and it's stressful knowing that if you lose your job, you have days to find a new job - or else give up your life in the US and leave. I have been here for years, I have a house, cars, friends.. you can't easily just leave everything behind.
The US needs to work on this issue. I agree that people shouldn't be losing their jobs to cheaper labor, but at the same time, what about highly skilled immigrants who want to contribute to the US economy and build a life here? The sword of Damocles hangs over our heads - lose your job and you have 10 days to find a new one, or get out. Doesn't matter if you've been here 10 years and have done everything you possibly could to be a good citizen.