Bei einem Select size=1 ohne "multiple"-Attribut brauchst du kein Array. Da kommt _immer_ _ein_ Wert zurück. Es kommt auch nicht "nichts" zurück. Wenn der gewählte Eintrag als value einen Leerstring hat, dann ist das nicht "nichts" sondern eben ein Leerstring.
Auch wenn du ein leeres <option></option> (ohne value-Attribut) nimmst, erhälst du auch einen Leerstring als Ergebnis. So wird das also nichts.
Die einzige Möglichkeit, das Element nicht im POST/GET zu haben, ist, ihm ein name-Attribut dynamisch zuzuweisen.
<select size="1" onchange="name=value">
Bei der Auswahl der Leer-Option wird der Name auf Leerstring gesetzt und ist nun zwar nicht mehr in PHPs $_POST/$_GET vorhanden, wird aber als "=" (Leerstring als Name und Wert, da bleibt nur das trennende = übrig) übertragen. Es besteht nun außerdem der gravierende Nachteil dass die values dokumentweit eindeutig sein müssen, damit es keine Überschneidungen gibt.
Entweder
<option value="xy_a">a</option>
oder
<option value="xy[a]">a</option>
Du musst dann auf das Vorhandensein einer Variablen (isset('xy_a')) oder Array-Keys (array_key_exists('a', $xy)) (oder das jeweilige $_POST/$_GET-Konstrukt) prüfen.
Ich sehe da keine Zeit- und Performace-Einsparung. Alles in allem ist das nur eine Verkomplizierung die am Ende nichts bringt:
Um zu wissen, ob etwas gewählt ist, musst du in jedem Fall eine bedingte Anweisung schreiben. Ob du nun testest, welcher Wert gewählt wurde oder testest ob etwas vorhanden ist kommt dann auf das gleiche raus.
Das Verwenden von Eventhandlern (und damit Javascript o.ä.) und sich dann auf dem Server drauf zu verlassen ist nur in einer geschlossenen Umgebung (Intranet) mit Einheitsbrowser und -einstellungen und Alternativbrowser-Verbot ratsam. Du solltest also schon beim kleinsten gemeinsamen Vielfachen bleiben: reines HTML.
Vielleicht ist einfach nur deine Auswertelogik im PHP-Script nicht performant genug. Wenn du da was beschleunigen willst solltest du dort ansetzen oder das zur Diskussion stellen.