Workflows cannot "move" an item, they can only copy it (which would preserve metadata but not listitem IDs). The built-in IDs cannot be changed or set manually. Your best bet is to create your own ID system using a workflow or event receiver to assign unique IDs to new items, and make a simple program to go through and assign IDs to all the existing items if necessary. Then you can use the "Copy list item" function in a workflow to create a duplicate in the new location, using conditional statements to read your metadata and determine where to place the new item, and you will be able to preserve the IDs you created. Workflows have the advantage of being able to be triggered by new items and/or changes to existing items.
Note that only 2010 workflows have the "Copy list item" action. In 2013 you have to use the "Create list item" action and manually assign all the fields. In either case you will have to use the "Delete item" action to remove the original item once you copy it to its destination.