The advantage the combo gave you was the RowSource. When you typed in the control, behind the scenes, Access was looking up the value in the RowSource query and bringing along all the other columns. You can certainly do that yourself, you just have to code the lookup separately. dLookup() works fine when you have only a single piece of data you need to lookup up but when you have multiple, the best solution is to open a recordset based on a query. To avoid all the searching code, use a query with a where clause. The Where clause will reference your textbox.
Select ...
From ...
Where SomeField = Forms!yourform!yourcontrol;
Open the RecordSet and if a record is found, fill the other controls just as you are doing now but instead of referencing the combo, just reference the RecordSet.