Add custom element criteria attribute without a field type?
Currently, yes, the only way to modify an element query (when it’s not your own element type) is to do it with a custom field type, from its modifyElementsQuery() function.

UPDATE

As of Craft 2.5, plugins can listen for the elements.onBeforeBuildElementsQuery and elements.onBuildElementsQuery events to make changes to the query (or prevent it from getting executed).

craft()-&gt;on('elements.buildElementsQuery', function(Event $event) {
    /** @var ElementCriteriaModel $criteria */
    $criteria = $event-&gt;params['criteria'];

    /** @var DbCommand $query */
    $query = $event-&gt;params['query'];

    if ($criteria-&gt;myCustomParamName) {
        $query-&gt;andWhere( //...
    }
});