What Nova version are you using ? Because in Nova 4 it's easily achievable. I don't have a Nova application on this computer to test the following code, but it should put you on the right track.
// At the top of your file.
use App\Models\Shop as ShopModel;
// In the fields() method.
BelongsTo::make('Company'),
Select::make('Shop')
->searchable()
->hide()
->dependsOn(
['company'],
function (Select $field, NovaRequest $request, FormData $formData) {
if ($formData->company) {
$shops = ShopModel::where('company_id', $formData->company)
->get()
->mapWithKeys(fn ($shop) => [
// The label here is gonna be on your Nova Shop resource title.
// If you don't have a Nova Shop resource
// or desire another label, alter this logic.
$shop->id => Shop::make($shop)->title()
]);
$field->options($shops)->show();
} else {
$field->options([])->hide();
}
}
),