This reason isn't one of statutory necessity, but one of contractual creation.
Online sellers don't take money until dispatch for a few reasons: in case they have made a mistake on the price. This way, there's no legal contract until the goods would be sent- so the company can check before they post them and wouldn't have to spend time trying to recall mis-priced goods, and the 'buyer' doesn't have any legal entitlement to the goods. Secondly, they may find they don't have the goods in stock due to over ordering- so by not taking money until dispatch, there's no issue of breaching any contract through failing to deliver on time.
Taking money at the time of ordering may be unusual, but is certainly not illegal. However, they now have a contract with you, so cannot move delivery dates (when time is 'of the essence') and cannot request more money in case of production difficulties. Plus, from their point of view, if you change your mind, you now have no entitlement to demand a refund in the interim period between ordering and delivery, which helps maintain their profits. Also, I guess that if they're building you a bespoke sofa, they might want the money to pay for the manufacture.