If you already know how to use the woocommerce templates then the easiest way to make this happen without having to rework all the backend code and not having to rewrite jquery is by making copies of three woocommerce templates for modification. This is for modifications to the default woocommerce templates.
checkout > form-checkout.php
checkout > form-billing.php
checkout > form-shipping.php
Changes to make on each template:
checkout > form-checkout.php
move <?php do_action( 'woocommerce_checkout_billing' ); ?>
on line 40 to line 44
and move <?php do_action( 'woocommerce_checkout_shipping' ); ?>
on line 44 to line 40.
Now on the other two templates there will be some code swapping.
from checkout > form-billing.php
on line 29 change <?php _e( 'Billing & Shipping', 'woocommerce' ); ?>
to <?php _e( 'Shipping & Billing', 'woocommerce' ); ?>
on line 33 change <?php _e( 'Billing details', 'woocommerce' ); ?>
to <?php _e( 'Shipping details', 'woocommerce' ); ?>
This is where the swapping of code comes in:
now cut lines 27 through 35 and paste it into checkout > form-shipping.php on line 25.
Do not loose your place on lines on checkout > form-shipping.php you will need to cut lines 25 through 33 and paste it into checkout > form-billing.php on line 27.
NOTE: this exchange of code on both templates
should be above this <?php do_action( 'woocommerce_before_checkout_billing_form', $checkout ); ?>
on checkout > form-billing.php template and above <?php do_action( 'woocommerce_before_checkout_shipping_form', $checkout ); ?>
on checkout > form-shipping.php template.
Now from checkout > form-billing.php cut lines 55 through 82 and paste in checkout > form-shipping.php on line 77.
Now from checkout > form-shipping.php cut lines 52 through 54 and paste in checkout > form-billing.php on line 53. This must be between what is on line 52 and 53 of the default template.
Final step would be to change the text in the input for the checkbox that should now be on checkout > form-billing.php line 31 if you followed this strictly.
You can copy and replace line 31 with the following:
<input id="ship-to-different-address-checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" <?php checked( apply_filters( 'woocommerce_ship_to_different_address_checked', 'shipping' === get_option( 'woocommerce_ship_to_destination' ) ? 1 : 0 ), 1 ); ?> type="checkbox" name="ship_to_different_address" value="1" /> <span><?php _e( 'Bill to a different address?', 'woocommerce' ); ?></span>
Last note about the woocommerce jquery that makes the fields appear from the checkbox
The jquery is working with the following element which should now be on checkout > form-billing.php line 35. <div class="shipping_address">