How can I join plugin data with entry data based on uri?
You could of course manually create a select query with a join that fetches entries ordered by hits descending, however you will basically be recreating what $criteria->find() does above. I imagine this will introduce an almost negligible performance improvement, but it really depends on how many entries you are returning. 

The following code should give you a starting point:

$query = craft()-&gt;db-&gt;createCommand()
    -&gt;from('pluginTable pluginTable')
    -&gt;join('elements_i18n elements_i18n', 'elements_i18n.uri = pluginTable.uri')
    -&gt;join(...)
    -&gt;order('pluginTable.hits desc');