Try something like this:
using (var searcher = new ManagementObjectSearcher("SELECT DeviceID, Caption FROM WIN32_SerialPort"))
{
string[] portnames = SerialPort.GetPortNames();
var ports = searcher.Get().Cast<ManagementBaseObject>()
.ToDictionary(p => p["DeviceID"].ToString(), p => p["Caption"]);
foreach (string name in portnames)
{
if (ports.TryGetValue(name, out var caption))
{
ArduinoComCmbBox.Items.Add($"{name} - {caption}");
}
else
{
ArduinoComCmbBox.Items.Add(name);
}
}