All the options above are valid. Another option would be to use a soft phone rather than two physical phones.
However, when you have two phones assigned to the same extension, in two completely different locations, you have a challenge with emergency phone calls (911 in the USA). I assume in your case there is one PBX for both locations?
Maybe I'm a little tired this Monday morning, but you are going to need to think about how the user's location is identified when they dial and emergency number. How do you ensure the correct E911 location is sent to the PSAP?
I can not see how this could be accomplished via outbound rules. For example, you can not do it with the extension's Caller ID number. You can not do it by extension group membership. And I don't think it is feasible to require users to remember to prepend digits in an emergency when dialing 911. So what are the alternatives?
What is needed is a way to identify the user's CURRENT location. If they use a soft phone, we could look at the phone's registered IP address (assuming you have assigned different subnets or range of IP addresses to each location). But if they are using a physical phone, we need another way to identify the user's IP address. Once we know the user's IP address, we can determine their location. All you need is a map:
IP Address --> Location --> emergency group
So, how do we automate the process of updating the user's emergency group? We (VoIPTools) have a Windows client application that serves two purposes: (1) it monitors for anyone dialing an emergency number so it can popup a notification on the desktop, and (2) it detects the computer's IP address. When the client application detects an IP change, it looks up the location and changes the user's emergency group automatically.
When you have people moving between locations, identifying their current location is CRITICAL so the correct information is sent to the PSAP. This is true if the user has two phones with the same extension number, or if they are using a soft phone on their laptop. You need a way to tell 3CX where the user is currently located.