Unlike cryptocurrencies like Bitcoin, the Ethereum transaction format only allows for exactly 1 destination address. There is no way to achieve this without using a smart contract. I'm not sure why you want to avoid using a smart contract.
Something you can try is a smart contract that, when deployed, immediately performs the transfers and then destroys itself. For example:
pragma solidity ^0.4.24;
constructor(address memory destinations, uint256 amounts) public payable
require(destinations.length == amounts.length);
for (uint256 i=0; i<destinations.length; i++)
Here you can see it in action: