This CSV is actually not a good way to model hierarchical data because you need an extra column for every additional depth in your hierarchy. This isn't something that's easy to process or to maintain.
Your first 3 columns are fine (though you'll need to use APOC Procedures to add the dynamic labels from your first two columns).
Your 3rd column is fine, every entry needs its own ID.
But forget about the rest.
Instead, use only two additional columns.
One of these, "Name" can be the name value that you'll use for the name property.
The other one can be something like "ParentID", which will be the ID of the entry's parent.
So in this case, line 4 would have:
Label1:"DomainA", Label2:"Object", ID:"DA4", Name:"Desktop_keyboard", ParentID:"DA1"
This way the depth of your hierarchy can be arbitrary, and the depth is independent of the number of columns in the hierarchy, each line only has properties for a single object, and references the id of the object's parent.
With this CSV structure, loading becomes trivial, though it would be best to do two passes over the CSV, one to create all the nodes and a second to create the relationships (though you would want to create indexes and/or unique constraints first).
Using APOC Procedures, the first pass would be (after adding your csv to the import folder):
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///import.csv' AS line
CREATE (n:Node {ID:line.ID, Name:line.Name})
CALL apoc.create.addLabels(n, [line.Label1, line.Label2]) YIELD node
RETURN count(node)
We're using a :Node base label here because index lookup in the next query will require knowing the label / property combination, and this can't be dynamic.
Next you would create unique constraints and/or indexes so lookup by certain properties becomes fast.
CREATE CONSTRAINT ON (n:Node) ASSERT n.ID IS UNIQUE
And lastly you would do one more pass to connect the relationships:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///import.csv' AS line
MATCH (n:Node {ID:line.ID})
MATCH (parent:Node {ID:line.ParentID})
CREATE (n)-[:Belongs_To]->(parent)