well, I hate to say it but the best way to keep that smell out is not to smoke
one other way is to clean your car thoroughly and often. wash down all surfaces that won't get damaged by liquids (glass, vinyl, plastic, etc) with a solution of water and a grease cutter applied to a good cloth. (the cloth should be thoroughly wet but not dripping) then dry the surfaces and apply a protectant on the vinyl and plastic. wash your leather surfaces with a cleaner such as Lexol and then treat them with protectant. (Lexol has great products for all of that) other than just protecting your surfaces, the protectant (whatever you end up choosing) will act as a layer that holds the smoke instead of it getting directly on the material
for your capets, remove your seats and shampoo the carpets often. treating them with a bit of scotchguard will help here too
that should do the most for keeping the smell out. as for those ionizers, I have no idea