In order to have more than one extension on a phone, you must first have a phone that will accommodate more than one account. Assuming you have one, then you need to create the extension in 3CX, if not already present, and then enter the phone through its web interface and manually provision the new extension into one of the unused account settings. It must be manually provisioned as the 3CX provisioning page only supports 1 account per phone. You will likely need to disable the phone from re-provisioning itself as it may overwrite the manual settings that you entered for the 2nd extension. It really depends on how the provisioning template is set within 3CX. If it has no attributes for other than the primary account, then you are likely OK with leaving provisioning on. If it does have attributes for the other accounts, you will need to manually alter the template with the desired account info or turn provisioning off. As new templates are released you may need to keep an eye out for changes.
With SIP trunking, think of the lines or trunks as being virtualized. There is but one data stream and within that data stream there is information, such as a DID, that allows the PBX to determine where calls coming in should be routed. To be able to select a given trunk/line on the outbound requires that somehow the trunks are segregated into discrete lines and that outbound rules are built to allow routing. For most SIP providers this would require a separate registration for each trunk.
There are also some systems that support DOD (Direct Outward Dialing), but this is something that is provided at the local carrier level and is not dynamic. It is essentially a way to have a DID come to a desk with one number (DID) and then use another number (DOD) on the outbound.
You can do what you seek using an analog gateway in many cases. You simply bring in POTS lines and set each up with their own registration and then build the rules so that a prefix will determine which route to take. In the case of some gateways, there is a dial code which will direct the call out of a specific port which in-turn picks up that line's caller-ID.
In the case of a PRI, I suspect it may be similar to the SIP aspect in some respects. While it may have 23 channels, there is always a possibility that more than 23 DIDs may be present. You would need to segregate and register the desired channels separately so as to provide a selectable route. Presumably the carrier would need to accommodate the desire as well so that they are not sending inbound calls down a desired outbound channel. This might create some rather interesting inbound route rules as who knows which DID will come in on which channel? Then the questions arise as to having a limitation with respect to one call per line/number. If two (or more) people need to make a call and need the same outbound number, how do you accommodate? If a call should come down the desired outbound channel.....? Does the carrier support CID changing at the PBX level or do you want them to set. Granted, I suppose it could be possible to have more than one outbound channel with the same CID for a trunk, but as 3CX only provides 3 routes per trunk, this may not be enough. It simply depends on demand versus availability and how you either group or segregate.
The easiest solution In BayMitch's situation is to set-up a SIP account for each business and have a separate registration for each as well. Yes, it may complicate the inbound somewhat as inbound rules will need to be created for each account, but it does offer the ability to use a prefix to route out to each company's account with its pertinent CID (set at the trunk level and not extension).