These are classic project management challenges, and there are many ways to approach them. But, here are some high-level thoughts:
1) If a client makes changes that substantially effect the cost of delivering a project, you should charge them for it, yes. You need to do it in a very organized way, with a written change order and good communications so that the client is always clear on what/why/when they are being charged.
2) If a client insists on a fixed-bid, but cannot commit to a project scope then just break the project into the smallest piece that they CAN commit to and bid on that.
3) Make this the clients problem, by having a single point-of-contact on the client side and getting that in writing. That way, they can bicker on their end but you know who to listen to.