For this usecase I'd stay away from External lookups since that field type is simple a "tag" field: It stores the selected string values - not any ID. So you can stuff arbitrary values into that field. For example this is a JobRole lookup using the WF API) that I've set to random values.

In our implementations we try to break it out into different fields and use display logic:
- company dropdown
- dropdowns for brands from each company
- use fusion to update the dropdowns (and even add a new brands dropdown when adding a new company)
If you have a use case of dozens of companies each with hundreds of brands, then maybe that approach doesn't work. In a recent project we used dependent external lookups. You could try
Company dropdown (real dropdown field)
Brand dropdown (external lookup that queries a datastore based on selected company)
In our case we would add the ID to the returned string so we wouldn't need to do name-matching when further using the data (here the brand)
Now - how to update using Fusion: If the ExtLookup is a single-lookup - use the Update/Create modules.
If you need to put multiple selections into the ExtLookup, the regular modules won't work due to how they pre-process data. They've built in such a way that the field literally needs to be set to an array in JSON format. CustomAPI call is the only option.
Use a transformToJSON module to create the string of the array (that will handle escaping quotes), and in the customAPI JSON, set the field to that JSON string.
