There are some who are free market absolutists that believe that you should be able to hire and fire people for any reason you see fit. While in theory this is a good idea, it allows people to unleash any form of personal pecadillo and make it company policy. Part of the reason racism, sexism and ageism have been muted in our society is because of labor laws. If people will not do the right thing of their own conscience, then sometimes the heavy hand of government regulation must come down.
IMO, if company policy changes, it ought not be retro-active in regards to personal, off-duty behavior, meaning, if the company did not have a no-smoking policy prior to a person being hired, they cannot be fired because of a change of policy. I think that it would be entirely reasonable to re-write labor laws to allow companies to drop high-risk employees from their insurance, or demand that they pay more to cover their own health expenses. That way, the punishment fits the 'crime'; you are losing the privledge of health care coverage, not losing your job. If a worker quits smoking and can prove it, then they can be re-admitted to the health care policy. Same with fat people (of which I am one).
One of the major cost of business is insuring employees, and for American business to stay competitive, spiraling healthcare costs will HAVE to be brought under control. If employees would take more pro-active steps to avoid getting sick in the first place (quitting smoking, losing weight), businessess can expand and thrive, and some small businessess that might not ever make it because of the crushing costs of healthcare could survive til they make a profit. Plus, that savings could go to better compensation to employees. I'd rather have a plasma TV now than to have a guaranteed respirator in the future...