Additional fields for Ubercart uc_order_product
First of all, if you want alter the meta information of an entity, the hook_entity_info_alter in your custom module is the right way. More information in official page: hook_entity_info_alter

In this particular case, attributte 'fieldable' is not defined, so the function responsable to call the hook_entity_info and hook_entity_info_alter is the entity_get_info() in common.inc file. This function provide default values and the default value to 'fieldable' is FALSE. You only need change this value implementing hook_entity_info_alter.

 function YOUR_MODULE_entity_info_alter(&amp;$entity_info){
   if(isset($entity_info['uc_order_product'])){
     $entity_info['uc_order_product']['fieldable'] = TRUE;
   }
 }


Second issue, This is a link to a previous question about how create fields programatically. The best answer suggests field_create_fieldand 'field_create_instance', but if you have a defined field (for example, an image type field created through the UI), you could use field_update_field and 'field_update_instance'. You can find more information about these functions in field.crud.inc in the field module folder.