These kind of operations tend to be called inside tight loops. The overhead of boxing the jvm int to an Integer and then wrapping it in a newly-created Option would be prohibitive. You may be able to get rid of the Integer boxing if Option is specialized correctly and if indexWhere takes advantage of this.
There is the obvious correspondence between i >=0 and Some(i), i < 0 and None, and with enough compiler magic, perhaps Option[Int with NonNegative] could be convinced to be represented like this. But, this isn't something that I would know how do do.
Or you could build a type today using 'tagged types' that is the disjoint union of non-negative integers and -1, but these things aren't part of the standard lib as they where 'discovered' since the library was written.
Matthew