I don't agree that it is necessary to have your chromosome names in any particular order, but if you absolutely must do this the only way I can think of it is convert to SAM format (not BAM), replace the header with a reordered one, convert back to BAM again and re-sort to get the alignments in the same order as the header. Some of these steps can be amalgamated. You cannot replace the header while in BAM format as internally BAM stored chromosome by the Nth SQ number in the header, thus it would simply migrate alignments to the wrong chromosomes.
That's all very messy, and IMO pointless, but something like this (untested) ought to work:
(cat new_header; samtools view in.bam) | samtools sort -o out.bam -