To get an immediate update you won't be able to use a workflow. By nature they run asynchronously (in the background) and any updates they make wouldn't be reflected on the form until it is refreshed after the process has completed.
What you would need to do instead is make a web service call using JavaScript to retrieve the related value and populate the form field.
Here is an example - it would fire on a Contact field's OnChange event and in this case finds the mobile phone number and populates a field on the form.
function Contact_OnChange() { var contact = Xrm.Page.getAttribute("new_contactid").getValue(); if (contact == null) { return; } var serverUrl = Xrm.Page.context.getClientUrl(); var oDataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc/ContactSet?$select=MobilePhone&$filter=ContactId eq guid'" + contact[0].id + "'"; var retrieveReq = new XMLHttpRequest(); retrieveReq.open("GET", oDataSelect, false); retrieveReq.setRequestHeader("Accept", "application/json"); retrieveReq.setRequestHeader("Content-Type", "application/json;charset=utf-8"); retrieveReq.onreadystatechange = function () { GetContactData(this); }; retrieveReq.send(); } function GetContactData(retrieveReq) { if (retrieveReq.readyState == 4) { if (retrieveReq.status == 200) { var retrieved = JSON.parse(retrieveReq.responseText).d; Xrm.Page.getAttribute("new_mobilephone").setValue(retrieved.results[0].MobilePhone); } } }