It is not an impossible problem, but one to take seriously.
I have a secret formula that works very well. This has worked on two houses for me, including my current residence.
Three aspects to formula:
1) Change out all the soft materials – carpet, drapes, etc. (no secret there)
2) Clean everything with a strong ammonia-based solution. We renovated our current home in 1998. Smoke residue was caked on every wall of the house. The aluminum window frames were badly yellowed. I tried everything – comet, bleach, paint thinner, engine cleaner, lacquer thinner. Even with elbow grease, walls and windows were yellow. One easy wipe with ammmonia left me with a yellow rag and shiny new aluminum. Same with the panelling/walls.
3) Oil-based primer and only oil-based primer. My first try, I put on three coats of water-based primer. I believe Kilz brand has both water and oil-based. The water-based one won’t work. Yellow stains leaked through every time, even on ammonia-wiped walls. Oil-based primer does much better. Some walls still needed two oil-based coats.
Duct-cleaning service may not work, either. Those services are designed to remove dust, not caked-on smoke residue. I would go in with ammonia and clean what you can by hand. That probably isn’t a big source of the smell, though.