Bueno, se me ocurrio asi.
Código HTML:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript">
var maxChars = 19;
function checkWidth(combo)
{
var n = combo.length;
for (i = 0; i < n ; i++)
{
if (combo.options[i].text.length > maxChars)
document.formulario.combo.style.width="250px"
}
}
</script>
</head>
<body>
<form name="formulario">
<select name="combo" size="1" style="width:150px" onChange="checkWidth(this)">
<option selected></option>
<option>opcion 1</option>
<option>opcion 2</option>
<option>opcion 3 y algo mas de opciones</option>
</select>
</form>
</body>
</html>
Habria que averiguar, cuantos caracteres entran en 150 pixeles. Estoy seguro que se puede, solo que no se como hacerlo. Creo que se multiplica la cantidad de caracteres en cada
option por una cantidad de pixeles...
Podrias probar con el evento
onFocus.